如何在cmake中配置

时间:2011-08-18 07:26:12

标签: dependencies cmake

我目前正在开发一个使用cmake的项目。该项目将alsa作为可选依赖项。因此项目CMakeLists.txt包含。

find_package(ALSA)

但是,我希望构建永远构建针对alsa,即使if在我的系统上。 (有点像--without-ALSA中的configure

我想在运行cmake时在命令行参数中执行此操作,而不是通过修改CMakeLists.txt

这可以用cmake吗?

编辑:

OR 让项目实现类似的东西会更好:

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

EDIT2:

最后我使用了& amp;我没有上面描述的选项(edit1)。为了有一点可读性,我定义了一个宏,它可以为我做一切 请参阅FindOptionalPackage.cmake

中的FreeRDP project

2 个答案:

答案 0 :(得分:1)

首先运行CMake并打开生成的CMakeCache.txt文件。你会发现类似的东西:

ALSA_INCLUDE_DIR =的/ usr /包括/ ALSA

(你基本上只需要知道如何调用变量)。然后你应该能够用参数

调用cmake
-DALSA_INCLUDE_DIR=ALSA_INCLUDE_DIR_NOTFOUND

这告诉cmake,alsa不在你的系统上。如果这不起作用,请尝试查看包含alsa的其他变量,并将它们设置为某些值,表明无法找到该库。如果正确实现了FindALSA.cmake脚本(即正确的缓存),这应该可行。

答案 1 :(得分:0)

上述答案有效,但看起来并不干净。

在工作中我们这样做(例如):

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中读取。