首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >make在g++中不使用g++选项

make在g++中不使用g++选项
EN

Stack Overflow用户
提问于 2017-01-07 08:30:26
回答 2查看 11.9K关注 0票数 2

我正在尝试使用make编译c++文件。但是,默认情况下,它并不使用-std=c++11标志。每当我需要编译一个使用c++11特定特性的程序时,我必须使用g++显式地编译它。

因此,我想问一问,如何使我的系统上的所有c++文件自动使用选项c++。

如果我需要为g++更改一些全局makefile,那么makefile在Linux 18上的位置是什么,以及需要更改或添加什么?

还是我需要为自己创建一个Makefile?

编辑1:我正在调用的

代码语言:javascript
复制
make myfile

而且目录中只有.cpp文件及其二进制文件。目录中没有Makefile。

编辑2:这里,myfile是我想编译的c++文件的名称。

当我使用-d选项运行make时,我得到了以下输出(我无法粘贴所有的输出,因为它很长,并且超过了身体大小限制,因此,我包括输出的屏幕截图)。图1

这个图像(2)有一些从末尾开始的线条。

图2

我故意在文件"MagicalWord.cpp"中做了一个修改,这样就可以找到要做的东西了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-07 13:18:10

没有“全局makefile”,也无法更改make所有调用的默认标志(除非您自己编辑源代码为GNU并编译它,这在这种情况下是个坏主意)。

在makefile中,添加以下行:

代码语言:javascript
复制
CXXFLAGS += -std=c++11

假设您正在使用内置的规则进行编译,或者您使用的是标准变量和您自己的规则,这将满足您的需要。

如果这样做不起作用,我们需要看到makefile,或者至少是构建C++源文件所用的规则(比如-d输出在这里是没有用的--如果没有构建文件,或者您认为应该构建或者类似的文件,这会很有趣)。

票数 5
EN

Stack Overflow用户

发布于 2017-01-07 13:20:05

为所有C++项目设置一种系统范围的语言并不一定是一个好主意。相反,定义一个Makefile来指定您想要的任何编译器选项:

代码语言:javascript
复制
CXXFLAGS := -std=c++11 $(CXXFLAGS)

然后在编译C++程序时将CXXFLAGS传递给编译器(假设您使用的是默认的GNU规则)。

如果Makefile驻留在当前的工作目录中,那么现在可以运行make target,以便将target.cpp文件编译成target可执行文件。如果Makefile位于另一个目录中,则必须指定其路径:

代码语言:javascript
复制
make -f path/to/your/Makefile target

如果只想为一次运行添加额外的参数,可以在命令行中设置环境变量或make变量:

代码语言:javascript
复制
# environment:
CXXFLAGS='-std=c++11' make target

# make variable:
make target CXXFLAGS='-std=c++11'

其中任何一个都会导致执行g++ -std=c++11 target.cpp -o target或等效程序。

理论上,您可以将您的shell配置文件编辑为export CXXFLAGS='-std=c++11',这将使您运行的所有程序都可以使用该环境变量。实际上,通过环境变量设置编译器选项往往会导致更多的问题,而不是解决问题。

在所有这些解决方案中,编写一个普通的Makefile是迄今为止最简单的方法。这样,所有的构建配置都在一个地方,并且完全自动化。

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

https://stackoverflow.com/questions/41519451

复制
相关文章

相似问题

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