Клонировать библиотеку другого типа - PullRequest
0 голосов
/ 09 июля 2020

В моем проекте мы создаем каждую библиотеку как модуль-библиотеку и устанавливаем их. Поэтому мы не можем ссылаться на эти целевые библиотеки в нашем модульном тесте.

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-модуль?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...