2017-01-07 159 views
-2

我想使用make编译C++文件。但是,默认情况下,它不使用-std = C++ 11标志。无论何时我需要编译一个使用C++ 11特定功能的程序,我都必须使用g ++来显式编译它。使用-std = C++ 11选项g ++

所以,我想问如何让我的系统上的所有C++文件自动使用选项-std = C++ 11。

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

或者我需要为自己创建一个Makefile吗?

编辑1:我调用做出这样

make myfile

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

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

当我使用-d选项运行make时,我得到以下输出(我无法粘贴所有的输出,因为它很长并且超出了主体大小限制,所以我包括输出的屏幕截图)。 Image 1
而这张图片(2)从最后一行开始。
Image 2

我特意对文件"MagicalWord.cpp"进行了更改,以便找到可以做出的事情!

+0

你是如何调用make命令的?你正在运行的目录的内容是什么? – taskinoor

+0

什么是myfile? – taskinoor

+0

如果使用'-d'选项运行make,它会打印出一行,例如'读取makefile ... 正在读取makefile'Makefile'...'后打印版本信息。它说的是哪个文件? – taskinoor

回答

1

没有“全局生成文件”,也没有办法改变所有make调用的默认标志(除非你编译GNU make的源代码并自己编译它,在这种情况下这是一个坏主意) 。

在Makefile(S),添加一行:

CXXFLAGS += -std=c++11 

假设你使用内置的规则编制的东西,或者你正在使用标准的变量有自己的规则,那将会做你需要的。

如果这不起作用,我们需要看看您的makefile或至少是用来构建C++源文件的规则(类似于-d输出的东西在这里没有用处 - 这很有趣,如果文件没有被建造,你认为应该是或类似的)。

1

为所有C++项目设置系统范围的语言不一定是个好主意。取而代之的是,一个Makefile指定任何您想要的编译器选项:然后

CXXFLAGS := -std=c++11 $(CXXFLAGS) 

的CXXFLAGS传递到您的编译器编译C++程序(假设你使用的是默认GNU制定规则)时。

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

make -f path/to/your/Makefile target 

如果你想添加额外的参数只是一个跑,你可以在命令行环境变量或make变量:

# 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是迄今为止最简单的方法。这样,所有的构建配置都在一个地方,并且完全自动化。

相关问题