【问题标题】:How to forward environment variable to CMake in Eclipse?如何在 Eclipse 中将环境变量转发到 CMake?
【发布时间】:2021-09-18 17:39:33
【问题描述】:

我有一个通过 CMake 配置的项目,我已将其导入 Eclipse,并且可以毫无问题地编译。

我想检查某些文件的大小,为此,我通过 Cmake 命令调用定义的大小实用程序,如下所示

add_custom_command(
    TARGET myTarget
    POST_BUILD
    COMMENT "Unit sizes"
    COMMAND ${CMAKE_SIZE_UTIL} "C:/LocalData/Projects/build_dir/debug/apps/myApp/code/CMakeFiles/units.dir/myUnit/src/*.o"
)

上面的命令工作正常,因为我提供了*.o 文件的硬编码路径

Unit sizes
   text    data     bss     dec     hex filename
   xxxx       x     xx      xx     xxx  C:/LocalData/Projects/build_dir/debug/apps/myApp/code/CMakeFiles/units.dir/myUnit/src/a.o
    xxx       x     xx      xx     xxx  C:/LocalData/Projects/build_dir/debug/apps/myApp/code/CMakeFiles/units.dir/myUnit/src/b.o

但是,我想将 Cmake custom_command 中的硬编码路径替换为 Eclipse 中定义的包含此路径的变量myPath,即myPath=C:/LocalData/Projects/build_dir/debug/apps/myApp,这样会更灵活。

add_custom_command(
    TARGET myTarget
    POST_BUILD
    COMMENT "Unit sizes"
    COMMAND ${CMAKE_SIZE_UTIL} "${myPath}/code/CMakeFiles/units.dir/myUnit/src/*.o"
)

我能做到这一点吗?如果是这样,我该怎么做?

提前致谢

【问题讨论】:

  • 你不应该使用环境变量...几乎可以肯定你想要${CMAKE_CURRENT_BINARY_DIR}
  • 从头开始,你想要$<TARGET_OBJECTS:...>。不要在 CMake 内部目录(如 CMakeFiles)中闲逛。

标签: eclipse cmake eclipse-cdt


【解决方案1】:

您不应该为此使用环境变量。它很脆弱,因为用户可能忘记设置它,并且因为存在$<TARGET_OBJECTS:...> 而显得多余。

基于在您的代码中看到code/CMakeFiles/units.dir,我假设您在某处声明了一个名为units 的目标。如果是这种情况,那么完全正确的做法是直接通过生成器表达式将 CMake 粘贴到目标对象中:

add_custom_command(
  TARGET myTarget POST_BUILD
  COMMAND ${CMAKE_SIZE_UTIL} "$<TARGET_OBJECTS:units>"
  COMMAND_EXPAND_LISTS
)

这将在命令行上准确列出units 的目标文件作为单独的参数COMMAND_EXPAND_LISTS 这样做),无论它们位于磁盘上的什么位置。这绝对比在 CMakeFiles 目录中闲逛(其布局在技术上允许更改,恕不另行通知)更好的做法。

【讨论】:

  • 是的,你是对的,我有一个这样的目标,那么我应该在TARGET_OBJECTS 中设置什么?
猜你喜欢
  • 2020-06-08
  • 2013-04-17
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
相关资源
最近更新 更多