cmake add_library STATIC - работает, OBJECT - undefined reference

Я не профессионал в использовании cmake. Есть личный проект и я пытаюсь разработать его с cmake и вот тут незадача, просто не могу понять как это преодолеть.

Пример сруктуры проекта:

root
|-CMakeLists.txt
|-src/
  |-CMakeLists.txt
  |-main.cpp
  |-data/
    |-CMakeLists.txt
    |-data_units
      |-CMakeLists.txt
      |-data_unit1.cpp

Содержимое:

root/CMakeLists.txt

add_subdirectory(src)

root/src/CMakeLists.txt

add_subdirectory(data)
add_executable(exe main.cpp)
target_link_libraries(exe PRIVATE data)

root/src/data/CMakeLists.txt

add_subdirectory(data_units)
add_library(data INTERFACE)
target_link_libraries(data INTERFACE data_units)

root/src/data/data_units/CMakeLists.txt

add_library(data_unit1 OBJECT data_unit1.cpp)
add_library(data_units INTERFACE)
target_link_libraries(data_uints INTERFACE data_unit1)

В main.cpp идет создание класса из data_unit1.cpp, если в add_library для data_unit1 указывается OBJECT, то линковщик выдает undefined reference to 'этот класс'. Если же сделать STATIC в add_library для data_unit1, то всё хорошо.

Я не могу найти решение и понять что я делаю не так. Мне бы хотелось избавиться от необходимости создавать лишний раз библиотеку.

Версия cmake 3.27.7

UPD:

Если написать $<TARGET_OBJECTS:data>, то ошибка, что TARGET_OBJECTS не работает для INTERFACE.


Ответы (0 шт):