Я нахожусь в процессе разделения своей библиотеки на библиотеку только для заголовков и скомпилированную библиотеку, поэтому впервые я пытаюсь использовать CMake для создания или, скорее, предоставления библиотеки только для заголовков.
Читая это и документацию CMake, я понимаю, что мне нужно использовать библиотеку INTERFACE без источники. Но мои заголовки должны быть скомпилированы со стандартной версией языка C++ не ниже C++11. Когда я действительно что-то компилировал, я обходился:
set_property(TARGET foo PROPERTY CXX_STANDARD 11)
set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET foo PROPERTY CXX_EXTENSIONS OFF)
но это:
- Не совсем то, что мне нужно для кода, использующего библиотеку только для заголовков - мне нужно сказать как минимум С++ 11.
- Нельзя использовать в библиотеках INTERFACE.
Я заметил, что нет set_property(... INTERFACE)
. Итак, как мне заставить зависимый код использовать С++ 11 или более позднюю версию?
Редактировать: меня интересуют как ответы на ограничение выбора точной версии C++ в зависимых, так и ограничение, по крайней мере, в случае, если последнее проблематично/сложно/невозможно.
static_assert(__cplusplus >= 201103L, "C++11 or later required");
- person Ted Lyngmo   schedule 29.06.2020