5

因此,C++11 已经存在了一段时间,并且鉴于大多数平台上已经有支持它的编译器,在一些真正的软件中使用它会很好——例如可以打包成 as-portable-as 的软件-可能的包,最好提供 ./configure 等等。

因为 Clang 和 GCC 目前都需要 -std=c++11 标志来编译 c++11 源代码,并且有时都需要特定的标志才能正常工作(参见例如How to compile C++11 with clang 3.2 on OSX lion?C++11 线程不工作),我很担心由于错误调用编译器,该包将无法在某些已经支持 c++11 的平台上运行。

问:是否有一些标准如何正确且可移植地编译 c++11?例如 autotools/autoconf 检查或一些描述所有可能需要的选项的编译器/平台指令列表?还是因为 c++11 标准实现目前被标记为“实验性”,并且该标准最终会稳定并成为默认选择,而不需要使用任何额外的编译器标志?

谢谢

-exa

4

2 回答 2

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 和 32 位和 64 位 linux 中编译和运行。我还没有在 OSX 中测试它。

于 2013-06-14T12:23:03.187 回答
1

好吧,如果您正在尝试编写可移植代码,我建议您使用cmake 一个非常强大的跨平台开源构建系统。

使用 cmake,您应该能够识别当前机器中可用的编译器,然后使用您在每种情况下所需的标志生成您的 makefile。

到目前为止,我已经使用 cmake 快一年了,它大大减少了尝试在不同平台上编译项目时所消耗的时间。

于 2013-06-14T12:43:33.803 回答