使用具有2种不同配置的同一cmake目标

ggazkfy8  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(169)

我在我的代码库中使用了一个第三方库Scheme S7,它由一个头文件和一个源文件组成。我在我的两个库中使用了这个外部代码。在一个库中,我需要包含S7库的源文件并设置一些#defines,但在第二个库中,我只需要包含头文件,并有一组不同的定义。
是否有一种方法可以创建一个目标,使其适用于这两种情况,或者我是否需要为此创建两个不同的目标。第一个目标(包括源文件)的定义如下:

add_library(third_party_scheme INTERFACE)
add_library(third_party::scheme ALIAS third_party_scheme)

target_sources(third_party_scheme
    INTERFACE
        "scheme/s7.c"
)

target_compile_definitions(third_party_scheme
    INTERFACE 
        S7_EXPORT_LIB
        S7_OUTPUT_FUNCTION_FULL_STRING
)
eit6fx6z

eit6fx6z1#

所以只创建两个目标。

add_library(third_party_scheme "scheme/s7.c")
target_compile_definitions(third_party_scheme PUBLIC 
    S7_EXPORT_LIB
    S7_OUTPUT_FUNCTION_FULL_STRING
)

add_library(third_party_scheme2 "scheme/s7.c")
# no target_compile_definitions, or different ones.

我是否需要为此创建2个不同的目标
是的。你可以做一个函数,比如:

function(add_third_party_scheme_target name)
       add_library(${name} scheme/s7.c)
       target_compile_definitions(third_party_scheme PUBLIC 
             ${ARGV}
       )
endfunction()

add_third_party_scheme_target(third_party_scheme
    S7_EXPORT_LIB
    S7_OUTPUT_FUNCTION_FULL_STRING
)
add_third_party_scheme_target(third_party_scheme2
)

相关问题