我正在使用源文件生成器应用程序来生成使用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(与解决方案一起)。
现在,当我生成时,编译并执行生成器,然后编译并链接something_else。
但是,现在我遇到以下问题:如果我修改仅生成器的源并在构建目录中执行make,则会重新编译并链接生成器可执行文件,但它没有被执行, something_else 也没有被重新编译和链接,所以我必须再次make clean
和make
才能让生成器执行。
问题是:是否有可能让cmake重新运行生成器以防其源被修改?如果是,怎么样?
答案 0 :(得分:2)
那么,您应该在生成器编译目标和源生成目标之间引入人为依赖。
您应该按照Ronny Andersson在该页面上的回答中的建议,将以下内容添加到上述SO问题的CMakeLists.txt中。
add_binary(generator_name generator_source1... generator_source2...)
那样添加了生成器的创建,那么使用generator_name
作为依赖项名称)PROPERTIES GENERATED 1
中的参数add_custom_command
标记生成的来源。这三个参数在CMake生成的Makefile中构成了一个正确的依赖链。请参阅SWIG_ADD_SOURCE_TO_MODULE
中/usr/share/CMake/Modules/UseSWIG.cmake
底部的文字(或您的CMake发布内部所在的位置),了解完成与您的任务基本相同的任务所做的工作。
答案 1 :(得分:0)
仅当修改了任何CMakeLists.txt或* .cmake文件时,CMake才会重新运行。 一个技巧可以修改 然后,您可以通过修改cmake文件来完成这一操作,从而再次触发CMake。