首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在makefile中从g++切换到clang++

在makefile中从g++切换到clang++
EN

Stack Overflow用户
提问于 2015-01-23 12:59:41
回答 2查看 4.9K关注 0票数 4

我得到了以下makefile:

代码语言:javascript
复制
all: xmltest
xmltest: xmltest.cpp tinyxml2.cpp tinyxml2.h

这很好--在执行make all可执行文件'xmltest‘之后就产生了。

但是,我希望将编译器切换到clang++。因此,我在文件的开头添加了这一行:

代码语言:javascript
复制
CXX=clang++

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

代码语言:javascript
复制
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

如何用最小的修改来修复这个问题?

EN

回答 2

Stack Overflow用户

发布于 2015-01-23 13:30:30

您不应该将头文件作为翻译单元列出(这些是cpps)

您通常应该使.h的先决条件:

代码语言:javascript
复制
xmltest.cpp: tinyxml2.h
tinyxml2.cpp: tinyxml2.h

并编制/链接翻译单位:

代码语言:javascript
复制
all: xmltest

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

您/可能/还可以/还使用|将“仅依赖”项放在同一行中。

代码语言:javascript
复制
xmltest: xmltest.cpp tinyxml2.cpp      |  tinyxml2.h
    $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

但我现在无法确认

票数 2
EN

Stack Overflow用户

发布于 2015-01-24 16:05:44

您最好只编写一个shell脚本:在解决方案中使用makefile没有好处。每当您更改任何文件时,都会重新生成整个文件,因此您最好运行:

代码语言:javascript
复制
clang++ -g -o xmltest xmltest.cpp tinyxml2.cpp

无论何时更改任何内容,跳过makefile。

如果您想要一个利用make的一些功能的makefile,您可以这样编写它:

代码语言:javascript
复制
CXX = clang++
all: xmltest
xmltest: xmltest.o tinyxml2.o
xmltest.o tinyxml2.o: tinyxml2.h

现在您有了一些有用的东西,只有需要根据您更改的内容重新构建的文件才会被重建。如果您的程序变得更加复杂,您可以使用更多的make工具来使其易于管理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28110500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档