У меня несколько проектов A, B, C, D
. (Существуют также другие проекты, от которых A, B, C
зависят, но здесь не представляют интереса.)
Существует класс Foo
в foo.cpp
внутри проекта A
. Foo
является частью библиотеки libA
из проекта A
, которая используется в другой библиотеке, libB
в B
, чтобы в конечном итоге сгенерировать некоторый исполняемый файл в проекте C
, скажем, c
.
Я хочу иметь свою собственную версию Foo
, реализованную в foo.cpp
, но в рамках проекта D
.
Я хотел бы использовать все те же параметры компиляции и связывания, включая те, которые используются для создание цели libA
. Создание другой цели libA
, но в рамках проекта D
, а затем построение зависимых пакетов, используя это. например, создать версию исполняемого файла c
, но проект D
.
Я предполагаю, что это возможно, просто используя CMake
, возможно, требуя некоторых флагов компоновщика, --allow-multiple-definitions
возможно?
Я не очень хорошо знаю CMake
, но я думаю, что это может быть что-то вроде
add_library(${PROJECT_NAME}_B_overlay STATIC
${PROJECT_A_NAME}
B_A_LIB
)
add_library(${PROJECT_NAME}_C_overlay STATIC
${PROJECT_NAME}_B_overlay
C_A_LIB
)
add_executable(${PROJECT_NAME}_c
${PROJECT_C_SOURCE_DIR}/c.cpp
)
target_link_library(${PROJECT_NAME}_c
${PROJECT_NAME}_C_overlay
${${PROJECT_C}_c_exe} # Not sure what to put here?
Возможно, мне следует использовать выражения генератора или какое-то другое target_property в cmake или, что более вероятно, я просто собираюсь это с использованием совершенно неправильного инструмента / метода? Я использую catkin
, а также CMake
, но не думаю, что это должно иметь значение.