Передать вывод утилиты командной строки компилятору / компоновщику

Я хочу передать результат 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).

Другие вопросы по тегам