听起来你有这样的事情:
OPTION( BUILD_OPTIONAL_PLUGINS "Build plugins that are not required for core install" FALSE)
IF(${BUILD_OPTIONAL_PLUGINS})
ADD_SUBDIRECTORY( Plugins/Optional) # Whatever it really is.
ENDIF()
到目前为止,一切都很好。但是,如果所有这些选项标志都为假,您现在可以拥有像“libCommon”这样没有人需要的库。
因此,您最简单的解决方案是:将库视为可选 TOO!
毕竟,如果没有任何消费项目本身将被构建,您甚至不需要构建它。因此,在同一个顶级 CMakeLists.txt 中有一个普通的“SET”变量,如“BUILD_COMMON”,默认为 TRUE。然后这样做:
SET( BUILD_COMMON 0)
IF(${BUILD_OPTIONAL_1} OR ...) # Detect if you need to build the lib
SET( BUILD_COMMON 1)
ENDIF()
IF(${BUILD_COMMON})
ADD_SUBDIRECTORY( common)
ENDIF()
然后,当您最终在此版本上执行“make install”时,一切都按预期工作。如果关闭所有可选插件,则仅由它们使用的库也永远不会构建。由于它从未在构建中,因此您无需尝试使其安装逻辑知道是否需要它。
您还应该在库以及每个可选插件的 INSTALL() 命令中添加这样的行:
INSTALL( TARGETS <plugin> .... OPTIONAL)
这告诉“make install”如果没有看到它的二进制文件,就不要尝试构建或安装目标。