C++11 如何使用premake指定C++;11汇编? 我尝试使用“ C++ 11 >代码>预制作< /Cord>标志,得到GNU C++编译器进行C++ 11编译。

C++11 如何使用premake指定C++;11汇编? 我尝试使用“ C++ 11 >代码>预制作< /Cord>标志,得到GNU C++编译器进行C++ 11编译。,c++11,premake,C++11,Premake,但是,此标志无法识别,我收到消息“invalid flag” 我在premakelua脚本中使用的语句在项目或配置级别如下: flags {"C++11"} 我正在通过MSYS在Windows 10上使用premake4。g++版本是4.8.1,支持C++11。(当我直接使用make时,我将c++11标志作为编译选项传递给编译器,它可以工作。) 如何使用premake获得C++11编译?好吧,我已经尝试了一些方法,我有了一个解决方案。它起作用了 1) 首先,对于premake4,flags{“

但是,此标志无法识别,我收到消息“invalid flag”

我在
premake
lua脚本中使用的语句在项目或配置级别如下:

flags {"C++11"}
我正在通过
MSYS
在Windows 10上使用
premake4
。g++版本是4.8.1,支持C++11。(当我直接使用
make
时,我将c++11标志作为编译选项传递给编译器,它可以工作。)


如何使用
premake
获得C++11编译?

好吧,我已经尝试了一些方法,我有了一个解决方案。它起作用了

1) 首先,对于
premake4
flags{“C++11”}
语句似乎不起作用。我的意思是,在
premake4
上,
C++11
标志无法识别。请注意,
flags
语句本身在
premake4
上有效,但(显然)不是
C++11
标志

2) 在
premake5
上,
flags
语句本身已被弃用。因此,您不能在
premake5
上使用
标志{“C++11”}
。相反,请使用
cpp方言“C++11”
语句。我在
配置
块中使用了它

3) 现在,您可以使用
premake5
发出语句来创建
makefile
。例如:

premake5 --file=premake-lua-scriptname.lua gmake
4) 稍后,当您运行生成的
makefiles
时,您将在默认情况下在包含premake5 lua脚本的dir的
bin
子目录下找到创建的二进制文件。接受我的建议并覆盖此默认值,使其与lua脚本在同一目录中创建。(我将在下面解释原因。)您可以使用
targetdir
函数覆盖此默认值,该函数可以在项目级别发布。例如:

targetdir "."
5) 请注意,
premake5
的当前(alpha12)版本不支持
clean
操作。要调用
clean
操作,必须使用
premake4
。这就是为什么我建议在默认目录中创建二进制文件
premake4
然后默认情况下对其进行清理


所有这些都有效。但是,有更好的解决方案吗?

对于windows build,您不需要指定任何内容,因为vs版本意味着支持所需的标准,所以
premake5.exe vs2012
或更高版本就足够了

供linux或macOS使用


buildoptions“-std=c++11”

正如@SSteven提到的,premake5-alpha12+使用
cpp方言“c++11”
。然而,C++20还不受支持,所以在这个特殊情况下,我不得不使用
buildoptions”--std=C++20“
(带有两个连字符)。刚刚意识到
-std=C++20
非常好,但是在使用空格
--std C++20
时需要两个连字符,我认为最好使用
gmake2
,因为Makefile格式将比使用
gmake
时更加现代。