Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 使用多个编译器生成_Gcc_Makefile_Clang_Libstdc++_Libc++ - Fatal编程技术网

Gcc 使用多个编译器生成

Gcc 使用多个编译器生成,gcc,makefile,clang,libstdc++,libc++,Gcc,Makefile,Clang,Libstdc++,Libc++,当使用C++14/C++11特性和STL包含时,GCC和clang具有不同的行为。Libc++倾向于隐式包含内容,而libstdc++似乎倾向于要求显式包含。GCC-Wpedantic似乎比铿锵-Wpedantic更迂腐 我想要的是有一个makefile,它尝试使用这两个编译器构建,以便捕获错误。最好的方法是什么?一般来说,make的工作只是使用一组特定的选项进行测试。测试多个配置是一些高级脚本的工作 首先,设置项目,使其可以进行树外构建。通常使用名为configure的脚本来执行此操作 然后,

当使用C++14/C++11特性和STL包含时,GCC和clang具有不同的行为。Libc++倾向于隐式包含内容,而libstdc++似乎倾向于要求显式包含。GCC-Wpedantic似乎比铿锵-Wpedantic更迂腐


我想要的是有一个makefile,它尝试使用这两个编译器构建,以便捕获错误。最好的方法是什么?

一般来说,
make
的工作只是使用一组特定的选项进行测试。测试多个配置是一些高级脚本的工作

首先,设置项目,使其可以进行树外构建。通常使用名为
configure
的脚本来执行此操作

然后,为每个配置创建一个树外构建:

pushd; mkdir build-gcc-libstdc++ && cd build-gcc-libstdc++ && ../configure CXX='g++'; popd
pushd; mkdir build-gcc-libc++ && cd build-gcc-libc++ && ../configure CXX='g++-libc++'; popd
pushd; mkdir build-clang-libstdc++ && cd build-clang-libstdc++ && ../configure CXX='clang++'; popd
pushd; mkdir build-clang-libc++ && cd build-clang-libc++ && ../configure CXX='clang++-libc++'; popd
(您可能还希望对多个gcc版本执行此操作,因为它们之间的标题也有很大差异)

要全部运行它们,请执行以下操作:

make -C build-gcc-libstdc++ [targets ...] &&
make -C build-gcc-libc++ [targets ...] &&
make -C build-clang-libstdc++ [targets ...] &&
make -C build-clang-libc++ [targets ...]

但通常我只是使用默认配置构建,并让travis捕获其他配置中的错误。请注意,我没有使用libc++:

是什么阻止您创建在makefile中包含所有这些选项的目标?@CarlNorum Nothing(请记住使用
${MAKE}
而不是
MAKE
),但它在大多数工作流中的用处非常有限。快速周转对于WIP构建最为重要,在提交时,如果键入
makepoly
vs
/makepoly.sh