2013-11-11 3 views
1

My UNIX Makefile выглядит следующим образом:CMake: установка значений по умолчанию для аргументов

param=0 

    run: 
     ./foo -r "fun($(param))" 

Так что, если я make run, я получаю ./foo - r "fun(0)" и для make run param=10, я получаю ./foo -r "fun(10)".

Теперь я хочу сгенерировать аналогичный Makefile с помощью cmake.

add_custom_target(
    run 
    ./foo -r "\"fun($(param))\"" 
    ) 

Как установить значение по умолчанию для param внутри файла конфигурации CMake?

+1

Я не думаю, что это возможно, потому что CMake предназначен для использования с любым устройством системы сборки, и, например, то, что будет работать для 'make', не будет иметь смысла для' msvc'. Может быть какое-то кросс-платформенное решение, например, чтение переменной из файла? –

ответ

4

Концепция в CMake несколько отличается. Вы можете определить «переменные кэша» (в основном, переменные, которые запоминаются для последующих сборок в одном и том же каталоге компоновки, и могут быть настроены пользователями), которые поставляются со значениями по умолчанию и строками документации и т. Д. Затем их можно изменить либо путем передачи -D name:type=value опций в cmake, либо с использованием одного из более дружественных интерфейсов (например, ccmake, пользовательский интерфейс curses для CMake).

Пример основан на ваш вопрос:

 
SET(param 0 CACHE STRING "Test variable defaulting to '0'") 
# ... 
add_custom_target(run ./foo -r "\"fun(${param})\"") 

Вы найдете более подробную информацию в исчерпывающих документы для CMake.

PS. это для переменных внутри CMake и конкретно CMakeLists.txt; насколько я могу сказать, возможность изменить значение не переносится в сгенерированный Makefile. Я не уверен, что это возможно в первую очередь, потому что это, вероятно, не будет совместимо со всеми целями, поддерживаемыми CMake (например, проектами Visual Studio, а что нет). В любом случае, CMake, похоже, не был предназначен для генерации файлов сборки, используемых независимо от CMake.

+0

У меня были те же мысли, что и в вашем обновлении. Возможно, можно добавить пользовательскую строку при создании специального (например Unix) Makefile. – nil

+0

@nil. Можно добавить правила пользовательской сборки, используя 'add_custom_command', но я не вижу способа установить значение по умолчанию для переменной на верхнем уровне' Makefile'. –

0

Использование

set (projectname_param 0) 

, чтобы установить его.

+0

Это не работает для меня. Значение 'param' не заменяется. Я получаю './foo -r 'fun()" '. – nil

Смежные вопросы