Cmake:安装时执行Cmake命令
cmake: execute cmake commands at install time
当我在CMakeLists.txt主文件中拥有它们时,我有以下行执行没有问题。
set (git_cmd git)
set (git_arg rev-parse --verify HEAD )
message(STATUS "git cmd: ${git_cmd}")
execute_process(COMMAND ${git_cmd} ${git_arg}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_ver)
message(STATUS "git ver[${git_result}]: ${git_ver}")
,当我执行cmake
时得到以下输出 -- "gitcmd:git"
-- "gitver[0]:3268845bbbda4af12c951d75c25913d014da48ef
但是我真正想要的是在安装时执行命令,当我执行"make install"
因此,我将这些LINES包含在install:中作为install(CODE " LINES ")
install( CODE
"
set (git_cmd git)
set (git_arg rev-parse --verify HEAD )
message(STATUS "git cmd: ${git_cmd}")
execute_process(COMMAND ${git_cmd} ${git_arg}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_ver)
message(STATUS "git ver[${git_result}]: ${git_ver}")
"
)
然而,当我执行"make install"时,输出似乎表明没有设置git_cmd
-- git cmd:
CMake Error at cmake_install.cmake:196 (execute_process):
execute_process given COMMAND argument with no value.
我做错了什么?
谢谢!
您在安装脚本中设置了变量,但在配置脚本中已经扩展了它们!
有四个选项可以解决这个问题:
-
决定并硬编码配置时的值:
set (git_cmd git) set (git_arg "rev-parse --verify HEAD") install( CODE " message(STATUS "git cmd: ${git_cmd}") execute_process(COMMAND ${git_cmd} ${git_arg} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE git_result OUTPUT_VARIABLE git_ver) message(STATUS "git ver[${git_result}]: ${git_ver}") " )
-
正确转义代码段:
install( CODE " set (git_cmd git) set (git_arg rev-parse --verify HEAD ) message(STATUS "git cmd: ${git_cmd}") execute_process(COMMAND ${git_cmd} ${git_arg} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE git_result OUTPUT_VARIABLE git_ver) message(STATUS "git ver[${git_result}]: ${git_ver}") " )
-
无论如何都要提前设置变量,但也只能在安装时扩展它们。我不确定他们是否必须在缓存中,但我怀疑他们这样做,所以我添加:
set (git_cmd git CACHE "" INTERNAL) set (git_arg rev-parse --verify HEAD CACHE "" INTERNAL) install( CODE " message(STATUS "git cmd: ${git_cmd}") execute_process(COMMAND ${git_cmd} ${git_arg} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE git_result OUTPUT_VARIABLE git_ver) message(STATUS "git ver[${git_result}]: ${git_ver}") " )
-
而不是试图得到引号正确,使用
install(SCRIPT
形式,并把命令放在一个单独的文件。
注意:
- 在这两种情况下,我在最后一行转义了
$
,因为这些变量总是只在脚本和 中定义 - 我也逃脱了
${PROJECT_SOURCE_DIR}
,但我不完全确定缓存是加载的。如果不是,则必须将其转义为"${PROJECT_SOURCE_DIR}"
(并希望值中没有"
)。 - 同样在第一种情况下,我把
git_arg
值放在引号中,因为列表将扩展与;
s分开,并且不会正确回读。
由于重新解析时特殊字符的问题,我将NOT推荐第一个选项
相关文章:
- 使用VS Code和CMake Tools运行自定义命令
- CMake "--target install"无需"--build"命令行
- 未知的 CMake 命令"create_single_source_cgal_program"
- 如何使用传递给编译器的相同参数在 cmake 中运行命令?
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- cmake add_custom_command + Xcode:多输出 = 多命令调用
- 如何从命令行使用 cmake 为有根的安卓设备制作可执行文件?
- 'cmake'不被识别为内部或外部命令 - 北极星
- 从 cmake 文件运行 npm 命令
- 在多个目标上 CMake 后期构建自定义命令?
- 未知 CMake 命令"swig_add_module"
- 使用 Visual Studio 2019 显示 CMake 的编译器命令行
- CMake:未能运行 MSBuild 命令:MSBuild.exe
- 应使用 CMake install 命令将可执行资源文件安装到何处?
- 如何打印 ;符号使用 CMake 命令
- CMake命令行定义不永久为工具链文件
- CMake命令行用于C++#define
- 如何使用CMake命令/设计一个共享库,使用更高的包括
- Cmake:安装时执行Cmake命令
- cmake 命令找不到提升库