Как передать cmake
флаги компилятора, при этом не перезаписывая объявленные в CMakeLists
, а добавляя к ним? Нужно изменить стандартную библиотеку для компиляции компилятором clang
. В CMakeLists
указаны -Wall
и т.п. флаги, а внешне хочу добавить к ним -stdlib=libc++
(стандартная библиотека от llvm
вместо libstdc++
от gcc
).
Пробую вызывать cmake
с опцией -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -stdlib=libc++"
, однако появляются ошибки. Скорее всего потому что ${CMAKE_CXX_FLAGS}
не подставляется в таком контексте. Если вызывать просто -DCMAKE_CXX_FLAGS="-stdlib=libc++"
, то по идее перезаписываются опции из CMakeLists
и варнингов не будет. Как быть?
В CMakeLists.txt
нужно правильно прописать установку переменных, упомянув предыдущее значение:
set (CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
После этого ни каких дополнительных телодвижений совершать не надо. Просто передать -DCMAKE_CXX_FLAGS="<свои флаги>"
cmake
'у и всё будет работать.
Если флаги устанавливаются не таким способом, то изменить их разумными средствами невозможно.
Немного деталей как это работает
При вызове cmake -DCMAKE_CXX_FLAGS=<...>
устанавливается кешированная переменная, которая сохраняется в CMakeCache.txt
. В дальнейшем при выполнение команды set
из CMakeLists.txt
её значение будет использовано и дописано в необходимое место. При этом команда set
устанавливает локальную переменную, значение которой не сохраняется, но применяется для последующих команд, как например add_executable
.
CMAKE_<LANG>_FLAGS
изначально инициализируется переменными окружения.
Таким образом можно написать что-то вроде
cmake -E env CXXFLAGS="-stdlib=libc++" cmake #...
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть микросхема M24SR04-Y, на которую я записал информацию с помощью NFCМне нужно прочитать эту информацию, используя i2c
Цель - создать класс матрица, который бы умел создавать двумерные массивы заданных размеров, но со случайными значениямиМассив создаётся,...