当使用C ++ 14 / C ++ 11功能和STL包含时,GCC和clang具有不同的行为。 Libc ++倾向于隐式包含事物,而libstdc ++似乎倾向于需要显式包含。 GCC -Wpedantic似乎比clang -Wpedantic更迂腐。
我想要的是有一个尝试使用这两个编译器构建的makefile,以便捕获错误。这样做的最佳方式是什么?
答案 0 :(得分:2)
作为一般规则,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 ++:https://github.com/themanaworld/tmwa/blob/master/.travis.yml