В моем проекте мы создаем каждую библиотеку как модуль-библиотеку и устанавливаем их. Поэтому мы не можем ссылаться на эти целевые библиотеки в нашем модульном тесте.
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-модуль?