我有一个 cmake 项目,其中一个安装目标是文件集合。此文件根据配置(发布、调试...)而变化。我希望能够像这样安装文件:
install(DIRECTORY $<TARGET_FILE_DIR:tgt>
DESTINATION bin
COMPONENT files)
Run Code Online (Sandbox Code Playgroud)
但是 cmake 不支持。生成器变量不适用于 DIRECTORY。所以我想知道是否有办法将目录保存在某处。缓存或文件,然后将其加载到 cpack 中。
所以我想问题是如何将变量从 cmake 传递给 cpack?
这是一个相当晚的答案,但我碰巧遇到了这个问题,试图解决一个有些不同的问题,该问题也可以概括为:“如何将变量传递给 CPack?” CPackDeb.cmake就我而言,我是从复制到工作区的自定义版本进行此调用的:
find_program(OPKG_CMD NAMES opkg-build HINTS "${OPKG_HINT}")
# ^^^^^^^^^^^^
# This is what I wanted to pass to CPack
Run Code Online (Sandbox Code Playgroud)
OPKG_HINT我在我的顶级 包含的文件中进行设置CMakeLists.txt,但它没有传递到cpack; 上面的find_program()调用看到 的空字符串OPKG_HINT。
结果证明解决方案非常简单:只需CPACK_在变量名称前面添加即可!
如果我这样做CMakeLists.txt:
set(CPACK_OPKG_HINT "${_sysroot_top}/aarch64-poky-linux/usr/bin")
Run Code Online (Sandbox Code Playgroud)
然后我可以将其放入我的CPackDeb.cmake文件中并且工作正常:
find_program(OPKG_CMD NAMES opkg-build HINTS "${CPACK_OPKG_HINT}")
Run Code Online (Sandbox Code Playgroud)
不管怎样,这对于OP来说是一个XY问题,但是......如果你真的需要在CMake时以可访问的方式设置一个变量cpack,那么在变量名前加上前缀CPACK_似乎可以解决问题很好...