Создание цели и иждивенцев cmake с использованием другой реализации объекта - PullRequest
0 голосов
/ 09 мая 2020

У меня несколько проектов 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, но не думаю, что это должно иметь значение.

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