CMake 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

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

使用延迟扩展的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 运行时而不是在配置生成时进行评估,例如请参阅此答案。

新输出:

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

最新更新