Как настроить в cmake - PullRequest
       21

Как настроить в cmake

0 голосов
/ 18 августа 2011

В настоящее время я работаю над проектом, который использует cmake. Проект имеет alsa в качестве необязательной зависимости. Таким образом, проекты CMakeLists.txt содержат.

find_package(ALSA)

Однако я хочу, чтобы сборка никогда не строилась против alsa, даже если она установлена ​​в моей системе. (Вроде как --without-ALSA, который был бы в configure)

Я хочу сделать это в параметре командной строки при запуске cmake, а не путем изменения CMakeLists.txt

Возможно ли это с помощью cmake?

EDIT:

ИЛИ было бы лучше, чтобы проект реализовал что-то вроде этого:

 if(WITH_ALSA)
    find_package(ALSA REQUIRED)
 elseif(NOT WITHOUT_ALSA)
    find_package(ALSA)
 endif()

EDIT2:

В конце я использовал опцию с и без, описанную выше (edit1). Чтобы иметь немного читабельности, я определил макрос, который фактически все делает за меня.
См. FindOptionalPackage.cmake в проекте FreeRDP

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Сначала запустите CMake и откройте сгенерированный файл CMakeCache.txt.Вы найдете что-то вроде:

ALSA_INCLUDE_DIR = / usr / include / alsa

(вам просто нужно знать, как вызывается переменная).Тогда вы сможете вызывать cmake с параметром

-DALSA_INCLUDE_DIR=ALSA_INCLUDE_DIR_NOTFOUND

Это говорит cmake, что alsa отсутствует в вашей системе.Если это не работает, попробуйте просмотреть другие переменные, содержащие alsa, и установите для них некоторые значения, указывающие, что библиотека не может быть найдена.Если скрипт FindALSA.cmake реализован правильно (т.е. корректно кэширует), это должно сработать.

0 голосов
/ 26 августа 2011

Приведенный выше ответ работает, но на самом деле не кажется чистым.

На работе мы делаем это (например):

IF(WITH_FOO)
    FIND_PACKAGE(foo REQUIRED)
ENDIF()

или вы можете сделать:

IF(NOT WITHOUT_FOO)
    FIND_PACKAGE(foo REQUIRED)
ENDIF()

когда вы конфигурируете сборку cmake, просто выполните

cmake -DWITH_FOO=1 

или

cmake -DWITHOUT_FOO=1

. Он чистый, и он работает гарантированно, и его легко понять и прочитать из файла cmakefile.

...