如何在 Eclipse 中将环境变量转发给 CMake?

How to forward environment variable to CMake in Eclipse?

我有一个通过 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

但是,我想用 Eclipse 中定义的包含此路径的变量 myPath 替换 Cmake custom_command 中的硬编码路径,即 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"
)

我能做到吗?如果可以,我该怎么做?

提前致谢

您不应为此使用环境变量。它很脆弱,因为用户可能会忘记设置它,而且它是多余的,因为 $<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 目录(其布局在技术上允许更改,恕不另行通知)中进行修改更好。