所以,C ++ 11已经存在了一段时间,并且鉴于已经有大多数平台支持它的编译器,在一些真实的软件中使用它会很好 - 例如一个可以在尽可能便携的包中打包,最好提供./configure等。
因为Clang和GCC目前都需要-std = c ++ 11标志来编译c ++ 11源,并且两者都需要特定的标志才能正常工作(例如参见How to compile C++11 with clang 3.2 on OSX lion?或C++11 Thread not working ),我担心由于编译器的错误调用,包在某些已经支持c ++ 11的平台上不起作用。
问:有没有一些标准如何正确和可移植地编译c ++ 11?例如。 autotools / autoconf检查或一些描述所有可能需要的选项的编译器/平台指令列表?或者情况是因为c ++ 11标准实现目前被标记为“实验性”,标准最终会稳定并成为默认选择,不需要使用额外的编译器标志吗?由于
-exa
答案 0 :(得分:1)
我正在使用CMake生成C ++ 11项目的Makefile。我需要做的唯一的CMakeLists.txt更改是添加以下内容:
ADD_DEFINITIONS("-std=gnu++11")
ADD_DEFINITIONS("-D_GLIBCXX_USE_C99_STDINT_TR1")
ADD_DEFINITIONS("-D_GLIBCXX_HAS_GTHREADS")
然而,当我使用Qt时,我使用新的gcc版本4.8重新编译QtSDK并获得一个在4.8版本中使用gcc的完整mingw系统。
对这些变化进行测试,该项目在Windows XP,Windows 7和Linux上编译并运行32位和64位。我还没有在OSX中测试它。
答案 1 :(得分:1)
好吧,如果您正在尝试编写可移植代码,我建议使用cmake 一个非常强大的跨平台,开源构建系统。
使用cmake,你应该能够识别当前机器中可用的编译器,然后使用你想要的标志生成你的makefile。
到目前为止,我已经使用cmake将近一年了,它显着减少了尝试在不同平台上编译项目所花费的时间。