我有一个cmake项目,其中一个安装目标是文件集合。此文件根据配置(Release,Debug ...)而变化。 我希望能够安装这样的文件:
install(DIRECTORY $<TARGET_FILE_DIR:tgt>
DESTINATION bin
COMPONENT files)
但是cmake不支持这一点。生成器变量不适用于DIRECTORY。所以我想知道是否有办法在某处保存目录。缓存或文件,然后将其加载到cpack。
所以我想问题是如何将变量从cmake传递给cpack?
答案 0 :(得分:2)
如果您使用&#34;单配置生成器(例如make和Ninja)&#34;以下设置可以正常工作并使用
调用CMakecmake -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_
,这似乎可以很好地解决这个问题......