CMake: разные флаги компилятора во время настройки?

Вы не можете частично специализировать функцию. Если вы хотите сделать это в функции-члене, вы должны частично специализировать весь шаблон (да, это раздражает). На большом шаблоном классе, чтобы частично специализировать функцию, вам понадобится обходной путь. Возможно, будет работать шаблонная структура-член (например, template <typename U = T> struct Nested). Или вы можете попробовать получить другой шаблон, который частично специализируется (работает, если вы используете нотацию this->member, иначе вы столкнетесь с ошибками компилятора).

0
задан Charles Nicholson 18 January 2019 в 03:22
поделиться

2 ответа

В моем случае вариант 3 оказался простым. В моем файле CMake для набора инструментов я просто добавил:

set(CMAKE_C_COMPILER_WORKS ON)
set(CMAKE_CXX_COMPILER_WORKS ON)

И теперь CMake не тратит впустую время на опросы функций моего компилятора.

Это работает в моем конкретном случае (прошивка встроенных систем), но было бы неплохо, как заставить CMake и -fstack-protector-strong работать также и с не встроенными программами.

0
ответ дан Charles Nicholson 18 January 2019 в 03:22
поделиться

Сказать CMake не использовать -fstack-protector-strong во время опроса компилятора?

Просто добавьте этот флаг компилятора после вызова project(), когда CMake проверяет компилятор.

project(MyProject)
# ...
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")

Вместо добавления флага в переменную CMAKE_*_FLAGS, вы также можете добавить его с помощью команды add_compile_options:

project(MyProject)
# ...
add_compile_options("-fstack-protector-strong")
0
ответ дан Tsyvarev 18 January 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: