我目前正在开发一个使用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答案 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中读取。