我得到了以下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如何用最小的修改来修复这个问题?
发布于 2015-01-23 13:30:30
您不应该将头文件作为翻译单元列出(这些是cpps)
您通常应该使.h的先决条件:
xmltest.cpp: tinyxml2.h
tinyxml2.cpp: tinyxml2.h并编制/链接翻译单位:
all: xmltest
xmltest: xmltest.cpp tinyxml2.cpp
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)您/可能/还可以/还使用|将“仅依赖”项放在同一行中。
xmltest: xmltest.cpp tinyxml2.cpp | tinyxml2.h
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)但我现在无法确认
发布于 2015-01-24 16:05:44
您最好只编写一个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工具来使其易于管理。
https://stackoverflow.com/questions/28110500
复制相似问题