使用CMake构建项目时如何禁用作为Git子模块的RtMidi示例编译
你对这段代码的判断是正确的:该CMake逻辑的顺序确实会导致无法通过全局BUILD_TESTING变量自动禁用示例构建。首先执行的option指令会直接将RTMIDI_BUILD_TESTING定义为默认值ON,后续的判断语句因为变量已经处于已定义状态,不会触发继承BUILD_TESTING的逻辑。
可选用以下解决方法:
- 无需修改子模块代码(最推荐):在你项目的顶级
CMakeLists.txt中,调用add_subdirectory(rtmidi)引入子模块之前,提前设置缓存变量强制覆盖默认配置:set(RTMIDI_BUILD_TESTING OFF CACHE BOOL "Disable RtMidi test/example builds" FORCE) - 配置阶段直接传参:执行CMake配置命令时手动传入参数禁用构建:
cmake <你的构建目录路径> -DRTMIDI_BUILD_TESTING=OFF - 调整子模块CMake逻辑(不推荐,子模块更新会覆盖修改):将rtmidi的CMakeLists.txt中的配置顺序调整为优先继承全局配置,再定义option:
调整后如果父项目设置了# 调整后的逻辑 if (NOT DEFINED RTMIDI_BUILD_TESTING OR RTMIDI_BUILD_TESTING STREQUAL "") set(RTMIDI_BUILD_TESTING ${BUILD_TESTING} CACHE BOOL "Build test programs") endif() option(RTMIDI_BUILD_TESTING "Build test programs" ${RTMIDI_BUILD_TESTING}) if (RTMIDI_BUILD_TESTING) # Examples are built here endif()BUILD_TESTING OFF,RtMidi会自动禁用示例构建,无需单独配置。
内容的提问来源于stack exchange,提问作者Cheche Romo
相关产品推荐
相关产品推荐

