make未使用-std=c++;11 g+的选项+; 我试图用make编译C++文件。但是,默认情况下,它不使用-std=c++11标志。每当我需要编译一个使用c++11特定功能的程序时,我必须使用g++显式编译它 >,我想问一下,我的系统中的所有C++文件,我如何自动使用选项-STD= C++ 11。
如果我需要为g++更改一些全局makefile,那么makefile在LinuxMint18上的位置是什么,需要更改或添加什么 还是我需要为自己创建一个Makefile 编辑1:我正在调用make likemake未使用-std=c++;11 g+的选项+; 我试图用make编译C++文件。但是,默认情况下,它不使用-std=c++11标志。每当我需要编译一个使用c++11特定功能的程序时,我必须使用g++显式编译它 >,我想问一下,我的系统中的所有C++文件,我如何自动使用选项-STD= C++ 11。,c++11,makefile,g++,C++11,Makefile,G++,如果我需要为g++更改一些全局makefile,那么makefile在LinuxMint18上的位置是什么,需要更改或添加什么 还是我需要为自己创建一个Makefile 编辑1:我正在调用make like make myfile 目录中只有.cpp文件及其二进制文件。我在目录中没有任何Makefile < > >强>编辑2:< /Stord>这里, MyFiels>代码>是我要编译的C++文件的名称。< /P> 当我使用-d选项运行make时,我得到以下输出(我不能粘贴所有输出,因为它很长,并
make myfile
目录中只有.cpp文件及其二进制文件。我在目录中没有任何Makefile
< > >强>编辑2:< /Stord>这里,<代码> MyFiels>代码>是我要编译的C++文件的名称。< /P>
当我使用-d选项运行make时,我得到以下输出(我不能粘贴所有输出,因为它很长,并且超过了主体大小限制,所以我包含了输出的屏幕截图)。
这张图(2)的末尾有一些线条。
我故意在文件
“MagicalWord.cpp”
中做了一个更改,以便make找到要制作的东西 没有“全局makefile”,也没有办法更改make所有调用的默认标志(除非您将源代码编辑为GNU make并自己编译,这在这种情况下是个坏主意)
在makefile中,添加以下行:
CXXFLAGS += -std=c++11
假设您使用内置规则进行编译,或者使用标准变量和您自己的规则,这将满足您的需要
如果不起作用,我们需要看到你的MaFor文件或者至少你用来构建C++源文件的规则(比如
Makefile
,指定您想要的任何编译器选项:
CXXFLAGS := -std=c++11 $(CXXFLAGS)
<> p>在编译C++程序时(假定使用默认GNU make规则),CXFLAG将传递给编译器。
如果Makefile位于当前工作目录中,您现在可以运行maketarget
,以便将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配置文件以导出cxflags='-std=c++11',这将使您运行的所有程序都可以使用该环境变量。实际上,通过环境变量设置编译器选项往往会导致更多的问题,而不是解决问题
在所有这些解决方案中,仅仅编写一个普通的Makefile是迄今为止最简单的方法。这样,所有的构建配置都在一个地方,并且完全自动化。您如何调用make命令,以及运行make的目录的内容是什么?什么是myfile?如果您使用
-d
选项运行make,它将打印一行,如读取makefile。。。打印版本信息后正在读取makefile“makefile”…
。上面写的是哪个文件?更新了相关信息的问题@taskinoor@ShubhamPrasad您需要发布实际的Makefile,这样人们就可以建议在哪里添加-std=c++11标志。没有适合每个平台和makefile的通用方法,这完全取决于您如何编写特定makefile的确切细节