2015-12-30 5 views
0

Я хочу передать результат вывода команды 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

Ответ здесь может быть полезен: http://stackoverflow.com/a/1468695/3171657 – Turn

+0

Почему «и не»? – usr1234567

+0

@ usr1234567 Backtick имеет смысл в контексте оболочки Bourne. Он делает оболочку для запуска команды, заключенной в backticks, а затем заменить его вместо целого выражения «backticked». – Orient

ответ

1

Согласно документации add_definitions команды, определение препроцессора, передается этой команде присоединяется к COMPILE_DEFINITIONS собственности:

Флаги, начиная с -D или/D, которые выглядят как определения препроцессора автоматически добавляются к COMPILE_DEFINITIONS directory для текущего каталога.

И содержание COMPILE_DEFINITIONS собственности, в соответствии с его documentation всегда замаскирован CMake, так что вы не можете сохранить особое значение обратных кавычек в команде сборки:

CMake автоматически избежать правильное значения для родная система сборки

Вы можете изменить CMAKE_CXX_FLAGS вручную, как вы увидите в своем комментарии.

Лучший способ заключается в использовании execute_process команды для выполнения команды необходимо на конфигурации стадии, и использовать его для вывода add_definitions команды. (Или используйте этот вывод для создания дополнительного файла заголовка с configure_file).