Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake安装(代码)查找目标工件_Cmake - Fatal编程技术网

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生成时的值。