2

我正在尝试将工作中的一些东西移植到 cmake,而我们使用 Windows 安装程序(目前使用 Inno Setup)所做的事情似乎在 cmake/cpack 中没有必然结果。我们有在安装时根据环境变量安装的开发库。因此,包含文件转到类似"%DEV_INCLUDE_DIR%/include"的位置,库文件本身转到类似"%DEV_LIB_DIR%/lib"的位置,并且环境变量DEV_INCLUDE_DIRDEV_LIB_DIR在安装程序运行时位于框上的环境中。因此,它们在生成安装程序的盒子上的内容无关紧要。

但是,cmake 似乎希望在编译时配置所有这些。它使用install目标生成packagecpack 的目标,然后您使用install命令添加要与安装程序一起安装的内容。如果我尝试将环境变量放在路径中,它就无法正常工作。如果我尝试

install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Include/" DESTINATION "%DEV_INCLUDE_DIR%/include")

然后我最终在使用 NSIS 安装程序安装包时得到一个%DEV_INCLUDE_DIR%文件夹CMAKE_INSTALL_PREFIX,这绝对不是我想要的。我希望它%DEV_INCLUDE_DIR%在安装时替换为该环境变量的值。我找不到任何方法来做到这一点。有谁知道如何做到这一点,或者甚至可能吗?

说实话,在这种情况下,我什至没有什么安装前缀(所有东西都是根据环境变量安装的),但是 cmake 似乎是围绕有一个的想法构建的,我希望安装前缀会如果命令DESTINATIONinstall的每个都是绝对目录,则只需忽略(或最坏的情况,创建一个空目录) ,但它不会将环境变量视为环境变量或绝对目录。我能想到的告诉 cmake 将其视为环境变量(例如$ENV{DEV_INCLUDE_DIR}")的所有方法都涉及在构建它的盒子上使用环境变量,而不是在安装它的盒子上使用环境变量。有什么方法可以让 cmake/cpack 的安装/打包内容在安装时实际使用环境变量?

4

0 回答 0