cmake-依赖于单个静态库的两个目标,应基于正在构建的目标来对其进行编译

时间:2019-07-02 11:47:51

标签: cmake

我有一个静态库和两个目标可执行文件,我们称它们为 libA EXE1 EXE2

libA 具有需要启用或禁用的预处理器宏,以及另一个基于我正在构建的目标可执行文件而需要链接或忽略的静态库。

如果我正在构建EXE1,可以说。然后,我需要启用libA中的宏并将其链接到另一个静态库。

如果我正在构建EXE2,则需要禁用libA中的宏,并且不要链接到另一个库。

我对如何解决此问题感到困惑。请帮助解决此问题。

1 个答案:

答案 0 :(得分:2)

您可以按如下方式使用接口库:

cmake_minimum_required(VERSION 3.10)
project(test)

add_library(libA INTERFACE)
target_sources(libA INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/liba.c)

add_executable(exe1 exe1.c)
target_link_libraries(exe1 libA)
target_compile_definitions(exe1 PUBLIC -DENABLE_THE_MACROS)

add_executable(exe2 exe2.c)
target_link_libraries(exe2 libA libOtherStatic)
target_compile_definitions(exe1 PUBLIC -DDISABLE_THE_MACROS)

libA是一个“虚拟”目标,不会产生任何输出,但是可以链接到其他目标(此处为exe1exe2) 链接到libA的任何目标也将自动接收libA的源。请注意,我必须将路径设置为绝对,以防止出现警告。