0
當使用C++ 14/C++ 11功能和STL包含時,GCC和clang具有不同的行爲。 LibC++傾向於隱式包含事物,而libstdC++似乎傾向於需要顯式包含。 GCC -Wpedantic似乎比clang更迂腐--Whopantic。使用多個編譯器
我想要的是有一個makefile,試圖與這兩個編譯器一起構建,以便發現錯誤。做這個的最好方式是什麼?
當使用C++ 14/C++ 11功能和STL包含時,GCC和clang具有不同的行爲。 LibC++傾向於隱式包含事物,而libstdC++似乎傾向於需要顯式包含。 GCC -Wpedantic似乎比clang更迂腐--Whopantic。使用多個編譯器
我想要的是有一個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 ...]
但通常我只是建立默認配置,讓其他配置特拉維斯捕捉錯誤。請注意,我不使用libC++:https://github.com/themanaworld/tmwa/blob/master/.travis.yml
什麼阻止你製作一個包含makefile中所有這些選項的目標? – 2015-04-03 14:48:52
@CarlNorum Nothing(只記得用'$ {MAKE}'而不是'make'),但是在大多數工作流程中它的用處是非常有限的。對於WIP構建來說,快速週轉是最重要的,並且在提交時,如果您鍵入'make poly' vs'。/ make-poly.sh',則沒有多大區別。 – o11c 2015-04-03 18:10:43