CMake安装(CODE)查找DESTINATION工件

时间:2018-04-12 19:11:51

标签: 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)的默认工作目录似乎是与源的当前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

如何找到要传递给WORKING_DIRECTORY的正确目录,以便脚本从DESTINATION .命令中的install(TARGETS)指定的目录运行?

1 个答案:

答案 0 :(得分:0)

使用CMAKE_INSTALL_PREFIX延迟扩展工作:

install(CODE "
  execute_process(COMMAND sh -c \"
    echo Do stuff in `pwd`
    exit 0
  \"
  WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX})
" COMPONENT linkTest)

我们必须使用\${CMAKE_INSTALL_PREFIX}而不是${CMAKE_INSTALL_PREFIX},因此在CPack运行时而不是在配置生成时进行评估,请参阅例如this answer

新输出:

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