我已经关注了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文件?
答案 0 :(得分:2)
您不应将头文件列为翻译单元(这些是cpps)
您通常应该制作.h先决条件:
xmltest.cpp: tinyxml2.h
tinyxml2.cpp: tinyxml2.h
编译/链接翻译单元:
all: xmltest
xmltest: xmltest.cpp tinyxml2.cpp
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
IIRC你/可能/还使用|
xmltest: xmltest.cpp tinyxml2.cpp | tinyxml2.h
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
但我现在无法检查
答案 1 :(得分:2)
您也可以编写一个shell脚本:在解决方案中使用makefile没有任何好处。每次更改任何文件时,都会重建整个文件,因此您也可以运行:
clang++ -g -o xmltest xmltest.cpp tinyxml2.cpp
每当你改变任何东西并跳过makefile时。
如果你想要一个利用了make的某些功能的makefile,你可以这样写:
CXX = clang++
all: xmltest
xmltest: xmltest.o tinyxml2.o
xmltest.o tinyxml2.o: tinyxml2.h
现在你有了一些有用的东西,只有那些根据你改变的内容重建所需的文件才会被重建。如果您的程序变得更复杂,您可以使用更多的make工具来保持其可管理性。