两个取决于单静态库的目标应根据正在构建的目标进行编译



我有一个静态库和两个目标可执行文件,我们将其称为 liba exe1 exe2

liba 具有需要启用或禁用的处理前宏,以及另一个静态库,需要根据我正在构建的目标可执行文件链接或忽略。

如果我正在构建exe1,则可以说。然后,我需要在liba中启用宏并将另一个静态库链接到它。

如果我正在构建exe2,我需要在liba中禁用宏,而不要链接到另一个库。

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

您可以使用以下接口库:

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的来源。请注意,我必须绝对做路径以防止警告。

相关内容

最新更新