如何将变量传递给cpack?

时间:2016-02-26 08:44:25

标签: cmake cpack

我有一个cmake项目,其中一个安装目标是文件集合。此文件根据配置(Release,Debug ...)而变化。 我希望能够安装这样的文件:

install(DIRECTORY $<TARGET_FILE_DIR:tgt>
    DESTINATION bin
    COMPONENT files)

但是cmake不支持这一点。生成器变量不适用于DIRECTORY。所以我想知道是否有办法在某处保存目录。缓存或文件,然后将其加载到cpack。

所以我想问题是如何将变量从cmake传递给cpack?

4 个答案:

答案 0 :(得分:2)

如果您使用&#34;单配置生成器(例如make和Ninja)&#34;以下设置可以正常工作并使用

调用CMake
cmake -DCMAKE_BUILD_TYPE=Release <source_dir>

https://cmake.org/cmake/help/v3.0/variable/CMAKE_BUILD_TYPE.html

如果您愿意,可以用其他方式定义${dir}变量。

IF (CMAKE_BUILD_TYPE STREQUAL "Release")
    SET(dir release_dir)
ELSE()
    SET(dir debug_dir)
ENDIF()

INSTALL(DIRECTORY ${dir} DESTINATION bin COMPONENT files)

答案 1 :(得分:2)

CMake 3.5支持DIRECTORY参数的生成器表达式。请参阅installing directories

答案 2 :(得分:2)

到目前为止,这似乎是最好的答案(来自cmake邮件列表上的某人)

install(DIRECTORY path/to/Debug/dir
  DESTINATION bin
  CONFIGURATIONS Debug
  COMPONENT files
)

install(DIRECTORY path/to/Release/dir
  DESTINATION bin
  CONFIGURATIONS Release
  COMPONENT files
)

答案 3 :(得分:2)

这是一个相当晚的答案,但我碰巧在这个问题上试图解决一个稍微不同的问题,这个问题也可以概括为:“如何将变量传递给CPack?”在我的情况下,我正在将这个调用从CPackDeb.cmake的自定义版本复制到我的工作区:

find_program(OPKG_CMD NAMES opkg-build HINTS "${OPKG_HINT}")
#                                             ^^^^^^^^^^^^
#                                 This is what I wanted to pass to CPack 

我在我的顶级OPKG_HINT包含的文件中设置CMakeLists.txt,但未将其传递给cpack;上面的find_program()调用看到OPKG_HINT的空字符串。

解决方案结果是愚蠢简单:只需将CPACK_添加到变量名称中!

如果我在CMakeLists.txt中执行此操作:

set(CPACK_OPKG_HINT "${_sysroot_top}/aarch64-poky-linux/usr/bin")

然后我可以将它放在我的CPackDeb.cmake文件中,它可以正常工作:

find_program(OPKG_CMD NAMES opkg-build HINTS "${CPACK_OPKG_HINT}")

无论如何,这对于OP来说有点X-Y problem,但是......如果你真的需要在CMake时间以这样的方式设置一个变量可以访问cpack,在变量名前加上CPACK_,这似乎可以很好地解决这个问题......