如何在 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
目录(其布局在技术上允许更改,恕不另行通知)中进行修改更好。
我有一个通过 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
目录(其布局在技术上允许更改,恕不另行通知)中进行修改更好。