CMake,如何在 Build 与 Install 中设置 configure_file 中不同的值

我有一个简单的 CMake 项目,包含 CTest 和 CPack。它使用 Lua C API 来加载和执行一个名为 script.lua 的脚本文件。 这个脚本将在构建和安装/打包时位于不同的位置,它的位置分别为:

[build]  : ${CMAKE_CURRENT_SOURCE_DIR}/src/scripts
[install]: ../scripts (相对于存放在 bin 目录中的 app)

我要实现的目标是在安装步骤中重新生成 configure_file,然后使用新的 configure_file 重新构建并继续进行普通的安装步骤,当然在之后要将 configure_file 恢复到原始状态。

欢迎任何关于这个问题的帮助。

点赞
用户2402272
用户2402272

我所理解的是,CMake 的 configure_file 命令在 cmake 程序执行期间才能充分发挥其作用。它在生成的 makefile 或其他 cmake 生成的构建系统组件中都没有表示。因此,如果您想在安装和预安装测试期间为文件进行不同的配置,

  1. 您需要为这两种情况执行完全分离的构建(从执行 cmake 开始),并且

  2. 您需要使用 cmake 命令行或执行环境的某些属性来传达所需的信息,例如使用 -D 选项在命令行上定义 CMake 变量。

我建议您不要走这条路。除了过于复杂外,安装与经过测试的软件不同也是不合适的。

您有许多更好的替代方案。其中之一是

  • 让程序本身具有接受 Lua 脚本自定义位置的功能。也就是说,让程序识别一个命令行参数或环境变量来实现这个目的。在预安装测试期间利用它。

  • 如果程序确实在运行时使用相对路径来定位脚本,那么只需(通过 CMake)将脚本的副本放置在构建树中的适当位置,这样程序将在测试期间正常找到它。

2021-08-01 13:49:17