Вы не дали нам много на go, но я могу дать общую идею.
CMakeLists верхнего уровня просто вызывает add_subdirectory
для различных целей. Они должны быть отсортированы так, чтобы ни одна цель не зависела от целей после it.
Для target1 у вас может быть следующее:
add_library(target1_common STATIC oven.cpp pan.cpp tray.cpp)
target_include_directories(target1_common PUBLIC include)
add_executable(target1 target1_main.cpp)
target_link_libraries(target1 PRIVATE target1_common)
Вы сказали, что target2 зависит от некоторых части target1, поэтому:
add_library(target2_common STATIC table.cpp chair.cpp plate.cpp)
target_include_directories(target2_common PUBLIC include)
target_link_libraries(target2_common PUBLIC target1_common)
add_executable(target2 target2_main.cpp)
target_link_libaries(target2 PRIVATE target2_common)
Исполняемые файлы связаны PRIVATE
, поскольку вы не будете ссылаться на них в дальнейшем, но PUBLIC
также будет работать.
РЕДАКТИРОВАТЬ: Добавлено target_include_directories
операторов, которые автоматически заполняют путь поиска заголовка для target1_common
и target2_common