首页 > 解决方案 > 克隆不同类型的库

问题描述

在我的项目中,我们将每个库创建为模块库并安装它们。因此,我们无法在单元测试中链接这些库目标。

add_library(foo MODULE foo.h foo.cpp)
target_link_libraries(foo PUBLIC bar::bar)
install(TARGET foo DESTINATION bin)
target_include_directories(foo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

add_executable(foo_tester fooTester.cpp)
target_link_libraries(foo_tester foo) #not possible. foo is a module
add_test(NAME foo_tester COMMAND foo_tester)

我的想法是克隆具有不同类型的库。但这似乎很容易出错

function(cloneLibrary TARGET)
    get_target_property(desired_sources ${TARGET} SOURCES)
    get_target_property(desired_source_dir ${TARGET} SOURCE_DIR)
    get_target_property(desired_include_dir ${TARGET} INCLUDE_DIRECTORIES)
    get_target_property(desired_link_libraries ${TARGET} LINK_LIBRARIES)
    get_target_property(desired_name ${TARGET} NAME)

    set(obj_name ${desired_name}_objLib)
    
    add_library(${obj_name} OBJECT ${desired_sources})
    target_link_libraries(${obj_name} PUBLIC ${desired_link_libraries})
    target_include_directories(${obj_name} PUBLIC ${desired_source_dir} ${desired_source_dir}})
endfunction(cloneLibrary)

有没有更简单的模式?任何cmake模块?

标签: cmake

解决方案


推荐阅读