gpt4 book ai didi

c++ - 如何使用cmake强制重新编译应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:27 25 4
gpt4 key购买 nike

我正在使用源文件生成器应用程序生成另一个使用 CMake 编译的应用程序的源文件(一个项目中没有)。

基本设置如下:

a. generator

b. something_else

The generator is a few CPP files linked together

The something_else is:

a. a few "normal" CPP files

b. generated CPP/h files which I have to link in.
These CPP files are generated by the generator

生成器在配置阶段配置了一些选项,根据这些选项生成的文件的内容是不同的。

问题出现在这里:CMake compile time generation of source (与解决方案一起)。

现在,当我ma​​ke 编译并执行生成器时,然后编译并链接 something_else。

但是,现在我遇到了以下问题:如果我修改 生成器的源代码并在构建目录中执行 make,生成器 可执行文件将被重新编译和链接,但是它没有执行,something_else 也没有重新编译和链接,所以我必须再次 make cleanmake 才能拥有生成器执行。

问题是:是否可以让 cmake 重新运行 generator 以防其源代码被修改?如果是,如何?

最佳答案

那么,您应该在生成器编译目标和源代码生成目标之间引入人工依赖。

您应该将上述 SO 问题中的以下内容添加到 CMakeLists.txt,如 Ronny Andersson 在该页面上的回答中所建议的那样。

  1. 在 add_custom_command 中使用 MAIN_DEPENDENCY 参数在“顶级”源和生成的文件之间引入依赖关系。
  2. 使用 DEPENDS 参数引入其他依赖项,例如对构建生成器的目标的依赖项(如果生成器的创建被添加为 add_binary(generator_name generator_source1... generator_source2...) 然后使用 generator_name 作为依赖名称)
  3. 将生成的源标记为使用 add_custom_command 中的参数 PROPERTIES GENERATED 1 生成。

这三个参数在 CMake 生成的 Makefile 中形成了一个正确的依赖链。请参阅 /usr/share/CMake/Modules/UseSWIG.cmakeSWIG_ADD_SOURCE_TO_MODULE 底部的文本(或您的 CMake 分发内部结构所在的任何位置),以查看已完成的解决方案基本上和你的任务一样。

关于c++ - 如何使用cmake强制重新编译应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com