cmake, как добавить флаги компилятора до конца в C ++ - PullRequest
0 голосов
/ 03 мая 2018

Я хочу установить стандарт компилятора C ++ на gnu ++ 17, но я не могу сделать это с CMAKE_CXX_STANDARD, поскольку это дает мне gnu++17 - недопустимое значение. Таким образом, я положил его в CMAKE_CXX_FLAGS. Но когда я компилирую, cmake добавляет std=gnu++11 к концу команды, например так: -

/bin/g++ -Wall -Wpedantic -Wextra -std=gnu++14 -no-pie   -fPIC -std=gnu++11 -o /path/to/main.cpp.o -c /blah/blahfeeelk

таким образом std=gnu++11 победа. Так что хочу добавить gnu++17 до конца. Как я могу это сделать ? (Я обрезал оригинальную команду)

1 Ответ

0 голосов
/ 03 мая 2018

CMake имеет три переменные для управления версией стандарта C ++ и включения / выключения расширений компилятора. Я показываю целевые версии здесь, потому что именно так их следует использовать в достаточно современном (v3.x) CMake.

add_executable(foo main.cpp)
set_target_properties(foo PROPERTIES
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS ON
)

Это включает C ++ 17, предотвращает автоматический откат к более раннему стандарту, если 17 недоступен, и включает расширения компилятора. Для GCC это эквивалентно -std=gnu++17 или -std=gnu++1z.

CXX_STANDARD со значением 17 доступно начиная с CMake 3.8. CXX_STANDARD_REQUIRED и CXX_EXTENSIONS существуют с CMake 3.1.

...