我正在使用qmake
制作一个项目,我希望它易于许多用户编译。到目前为止,我只为Linux和gcc编译器开发。我希望我的项目也可以在其他平台上编译。
到目前为止,我将编译器选项(我在 gcc 文档中找到(传递给 qmake,如下所示:
QMAKE_CXXFLAGS += -std=c++14
-ffloat-store
-O3
但后来我意识到这些选项可能对其他编译器无效,并试图为其他流行的编译器(如 clang 或 Intel(找到等效的选项。令我惊讶的是,我发现:
- 优化选项
-O0, -O1, -O2, -O3
对所有三个编译器都是通用的。 -std=c++11
和-std=c++14
选项对于 gcc 和 clang 是通用
的- 据我所知,
-ffloat-store
和其他一些选项仅在 gcc 中存在。
我想知道,是否有一些正式或非正式标准的选择?
POSIX定义了有关c99命令的某些内容(但AFAIK与C++无关(。
但是,qmake 实用程序通常能够找出(或至少预期(什么是C++编译器以及如何调用它。请注意,它正在生成一个Makefile
在Qt之外,你可以考虑cmake或autoconf。它们都生成 Makefile
-s。
另请参阅此答案(关于程序员(。
No.
C++标准不包括任何编译器选项。这是不同实现(甚至同一实现的不同版本(之间可能会有很大差异的东西。
在我的头顶上,主要编译器之间几乎没有任何共同点。
事实是,当您瞄准多个平台时,任何重要的项目都需要对代码内和构建过程进行一些微调。根据我的经验(这主要是基于意见的(,你最好的选择是为每个编译器制作尽可能简单的构建过程,并通过编译指示修复大多数"怪癖"在平台/编译器特定的包含文件中,你"自动包含"到处。