CMakeLists.txt (1556B)
1 # create object libraries instead of static libraries 2 add_library(lib_1 OBJECT lib_1_src1.cpp lib_1_src2.cpp) 3 add_library(lib_2 OBJECT lib_2_src.cpp) 4 add_executable(exe_with_static_libs main.cpp $<TARGET_OBJECTS:lib_1> $<TARGET_OBJECTS:lib_2>) 5 target_link_libraries(exe_with_static_libs doctest) 6 7 # object libraries cannot "link" to any target so this is how we get the INTERFACE include directories of the doctest target 8 get_property(doctest_include_dir TARGET doctest PROPERTY INTERFACE_INCLUDE_DIRECTORIES) 9 target_include_directories(lib_1 PRIVATE ${doctest_include_dir}) 10 target_include_directories(lib_2 PRIVATE ${doctest_include_dir}) 11 12 # alternatively we could create static libraries and use "doctest_force_link_static_lib_in_target" 13 #add_library(lib_1 STATIC lib_1_src1.cpp lib_1_src2.cpp) 14 #add_library(lib_2 STATIC lib_2_src.cpp) 15 #add_executable(exe_with_static_libs main.cpp) 16 #target_link_libraries(exe_with_static_libs lib_1) 17 #target_link_libraries(exe_with_static_libs lib_2) 18 #include(doctest_force_link_static_lib_in_target.cmake) 19 #doctest_force_link_static_lib_in_target(exe_with_static_libs lib_1) 20 #doctest_force_link_static_lib_in_target(exe_with_static_libs lib_2) 21 22 # group them together in a single folder inside IDEs 23 set_target_properties(lib_1 PROPERTIES FOLDER exe_with_static_libs) 24 set_target_properties(lib_2 PROPERTIES FOLDER exe_with_static_libs) 25 set_target_properties(exe_with_static_libs PROPERTIES FOLDER exe_with_static_libs) 26 27 doctest_add_test(NAME exe_with_static_libs COMMAND $<TARGET_FILE:exe_with_static_libs> --no-version)