当我拥有它们时,我有以下几行没有问题,因为它们在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包含在安装中:as 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.
我做错了什么?
谢谢!
答案 0 :(得分:1)
您正在安装脚本中设置变量,但已在配置脚本中扩展它们了!
有四种选择可以解决它:
在配置时决定并硬编码值:
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
值放在引号中,因为列表会以;
分隔,并且无法正确读回。由于重新分析时特殊字符存在问题,我会不推荐第一个选项。