首先 - 我知道有很多类似的讨论,但我花了几个小时没有他们为我工作。GNU make在新创建的子目录
我的makefile首先创建一个按当前日期和时间命名的目录。然后我把makefile附加到一个头文件中,该行用这个目录名创建一个字符串。出于这个原因,我首先需要将所有源文件(包括头文件)复制到新创建的子目录中,以便保留原始头文件并只修改将用于编译的头文件(在子目录中)。然后我想建立在这个新目录中。
我的问题在于如何正确构建新子目录中的.o
文件。我已经找到了解决办法是让
$(NOW)%.o: $(NOW)%.cpp $(CC) -c $(FLAGS) $<
其中$(NOW)$
是子目录名。问题是,我$(FLAGS)
似乎被忽略:输出,大致
g++ -c -o <.o file> <.cpp file>
(是的,其实是多余的介绍g++
和-c
之间的空间。)而建设中的顶层目录一拉
%.o: %.cpp $(CC) -c $(FLAGS) $<
正确输出
g++ -c <my flags> -o <.o file> <.cpp file>
总而言之,通过将源文件传输到新创建的子目录并在该目录中构建.o
文件,我无法正常编译。 TYIA。
发布'$(FLAGS)'设置的行。如果它是一个特定于目标的变量,那么这可能会导致您描述的问题。另外,如果它是使用':='设置的,并且是'$(NOW)%。o'目标下的,那么它的值将不会在该规则中生效。更完整的makefile会明确帮助诊断问题。 – blackghost