Передать вывод утилиты командной строки компилятору / компоновщику
Я хочу передать результат getconf PAGESIZE
вывод команды в качестве препроцессора определить для моей программы в виде -DPAGESIZE=`getconf PAGESIZE`
за [[gnu::assume_aligned(PAGESIZE)]]
в объявлении пользовательского распределителя.
Я попробовал следующее:
add_definitions(-DPAGESIZE=`getconf PAGESIZE`)
Но он расширился точно так же, как -DPAGESIZE="\`getconf" ... PAGESIZE`
, где ...
это содержимое другого CMAKE_CXX_FLAGS*
, Т.е. существует проблема с выходом из-под кавычек в CMakeLists.txt
файлы.
Как правильно передать такие аргументы компилятору / компоновщику в CMakeLists.txt
файлы? Может быть, есть другой способ достичь желаемого?
Тоже попробовал add_definitions(-DPAGESIZE="$$(getconf PAGESIZE)")
($$
расширен как $
от cmake
), но -DPAGESIZE
а остальная часть разделена cmake
, add_definitions("-DPAGESIZE=$$(getconf PAGESIZE)")
марки cmake
чтобы избежать каждого знака доллара, хотя.
1 ответ
В соответствии с документацией для команды add_definitions, определения препроцессора, переданные этой команде, добавляются к COMPILE_DEFINITIONS
имущество:
Флаги, начинающиеся с -D или /D, которые выглядят как определения препроцессора, автоматически добавляются в свойство каталога COMPILE_DEFINITIONS для текущего каталога.
И содержание COMPILE_DEFINITIONS
свойство, согласно его документации, всегда экранировано CMake, поэтому вы не можете сохранить специальное значение обратных галочек в команде build:
CMake автоматически экранирует значение правильно для собственной системы сборки
Вы можете изменить CMAKE_CXX_FLAGS вручную, как показано в вашем комментарии.
Лучше всего использовать execute_process
команда для запуска нужной команды на этапе конфигурации, и использовать ее вывод для add_definitions
команда. (Или используйте этот вывод для создания дополнительного заголовочного файла с configure_file
).