我有以下makefile:

all: xmltest
xmltest: xmltest.cpp tinyxml2.cpp tinyxml2.h


这可以正常工作-在执行make all可执行文件'xmltest'之后生成。

但是,我想将编译器切换到clang ++。所以我在文件的开头添加了这一行:

CXX=clang++


现在执行make all会产生错误:

clang++     xmltest.cpp tinyxml2.cpp tinyxml2.h   -o xmltest
clang++.exe: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated
clang++.exe: error: cannot specify -o when generating multiple output files
<builtin>: recipe for target 'xmltest' failed
make: *** [xmltest] Error 1


如何通过对原始Make文件进行最少的修改来解决此问题?

最佳答案

您不应该将头文件列为翻译单位(那些是cpps)

通常,您应满足.h先决条件:

xmltest.cpp: tinyxml2.h
tinyxml2.cpp: tinyxml2.h


并编译/链接翻译单元:

all: xmltest

xmltest: xmltest.cpp tinyxml2.cpp
    $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)




IIRC您/ might /还可以使用|将“仅依赖项”项放在同一行上

xmltest: xmltest.cpp tinyxml2.cpp      |  tinyxml2.h
    $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)


但我现在无法检查

10-08 09:38