从g++;叮当作响++;在makefile中
我有以下生成文件:从g++;叮当作响++;在makefile中,makefile,g++,clang++,Makefile,G++,Clang++,我有以下生成文件: all: xmltest xmltest: xmltest.cpp tinyxml2.cpp tinyxml2.h 这工作正常-在执行后,生成所有可执行文件“xmltest” 但是,我想将编译器切换到clang++。因此,我在文件的开头添加了这一行: CXX=clang++ 现在执行make all会产生一个错误: clang++ xmltest.cpp tinyxml2.cpp tinyxml2.h -o xmltest clang++.exe: warni
all: xmltest
xmltest: xmltest.cpp tinyxml2.cpp tinyxml2.h
这工作正常-在执行后,生成所有可执行文件“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
clang++xmltest.cpp tinyxml2.cpp tinyxml2.h-o xmltest
警告:将C++标题作为“C++头”处理时,在C++模式下,此行为被禁止。
clang++.exe:错误:生成多个输出文件时无法指定-o
:目标“xmltest”的配方失败
make:**[xmltest]错误1
如何通过对原始make文件进行最小修改来解决此问题?您不应将头文件列为翻译单元(这些是CPP)
您通常应设置.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)
但我现在无法检查这一点,您不妨编写一个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工具来保持它的可管理性。没有那一行,然后用那一行运行什么确切的命令?@EtanReisner我在中更新了make
的输出question@EtanReisner它解决了这个问题。你的评论是什么…:)