CMake安装(代码)查找目标工件
安装一些构建构件后:CMake安装(代码)查找目标工件,cmake,Cmake,安装一些构建构件后: install(TARGETS linktest DESTINATION . COMPONENT linkTest) 我想使用install(code)对这些工件进行一些后处理,大致如下: install(CODE " execute_process(COMMAND sh -c \" echo Do stuff in `pwd` exit 0 \") " COMPONENT linkTest) install(code)的默认工作
install(TARGETS linktest
DESTINATION .
COMPONENT linkTest)
我想使用install(code)
对这些工件进行一些后处理,大致如下:
install(CODE "
execute_process(COMMAND sh -c \"
echo Do stuff in `pwd`
exit 0
\")
" COMPONENT linkTest)
install(code)
的默认工作目录似乎是与源的当前CMakeLists.txt
目录对应的构建目录,例如,当我在详细模式下运行cpack
时:
CPack Verbose: Installing: /Users/jake/devel/linktest.build/_CPack_Packages/Darwin/ZIP/LinkTest-0.1.1-Darwin/./liblinktest.dylib
Do stuff in /Users/jake/devel/linktest.build
如何找到要传递到工作目录的正确目录
,以便脚本从目标指定的目录运行。
在安装(目标)
命令中?使用延迟扩展工作:
install(CODE "
execute_process(COMMAND sh -c \"
echo Do stuff in `pwd`
exit 0
\"
WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX})
" COMPONENT linkTest)
我们必须使用\${CMAKE\u INSTALL\u PREFIX}
而不是${CMAKE\u INSTALL\u PREFIX}
,因此将在CPack运行时而不是在配置生成时对其进行评估,请参见例如
新产出:
CPack Verbose: Installing: /Users/jake/devel/linktest.build/_CPack_Packages/Darwin/ZIP/LinkTest-0.1.1-Darwin/./liblinktest.dylib
Do stuff in /Users/jake/devel/linktest.build/_CPack_Packages/Darwin/ZIP/LinkTest-0.1.1-Darwin
只需使用变量:
WORKING\u DIRECTORY${CMAKE\u INSTALL\u PREFIX}
。似乎需要\${CMAKE\u INSTALL\u PREFIX}
来延迟扩展,但这是可行的。请随意发布答案。嗯,install(code)
接受字符串作为代码,无需延迟已定义变量的扩展。当CPack运行时,值将不同于CMake生成时的值。