我有一个C++项目,其中包含一个生成的文件,所有其他C++文件都依赖于它。我试图强制在任何其他编译之前生成和编译该文件。通常情况下,只需将该文件放在
那么,是否有一种方法可以通过依赖关系或其他方式强制运行生成的文件目标?我考虑使用类似以下内容的东西:
all:
目标中的第一位即可解决问题,但问题在于我的Makefile也是由构建系统生成的,我只能向其附加片段,而不能对其进行一般性编辑。那么,是否有一种方法可以通过依赖关系或其他方式强制运行生成的文件目标?我考虑使用类似以下内容的东西:
cpp_files := $(wildcard src/*.cpp)
$(cpp_files): generated_file.cpp
generated_file.cpp:
# generate the file here
但是它似乎没有起作用。为了参考,我的源目录结构如下,因此我需要递归收集cpp文件:
src/
|---file1.cpp
|---file2.cpp
|---subdir1/
|---file3.cpp
gen/
|---generated_file.cpp
.PHONY
将要避免的冲突,即豁免您引用的承诺。但是文件和规则之间仍然可能存在联系,例如:1)如果makefile包含该文件,则Make将执行该规则。2)如果makefile包含该文件,并且该文件存在,则其内容可能会在执行规则之前中止Make进程,3)配方中命令的行为可能取决于文件的内容(或文件是否存在)。这个技巧相当可靠,但不是不可破解的。 - Beta