[CMake] Linker error with sub project's static libs

Olaf Peter ope-devel at gmx.de
Tue Aug 19 14:42:11 EDT 2014


Hello,

for my project I have the following structure in my project directory:

./CMakeLists.txt
./source/CMakeLists.txt
./source/eea/CMakeLists.txt
./source/eea/ui/CMakeLists.txt
./source/eea/ui/schematic/CMakeLists.txt

with
---8<---
./CMakeLists.txt:
project(eea)
...

---8<---
./source/CMakeLists.txt:
add_subdirectory(eea)
...

---8<---
./source/eea/CMakeLists.txt
add_executable(eea ...)

target_link_libraries(eea
     eea_ui_schematic_lib
     eea_ui_lib
     ...
)

qt5_use_modules(eea Widgets ...)

add_subdirectory(ui)
...

---8<---
./source/eea/ui/CMakeLists.txt
project(eea_ui)
...
set(eea_ui_SOURCE mainwindow_private.cpp graphics_view.cpp...)
add_library(eea_ui_lib STATIC
     ${eea_ui_SOURCE}
     ...
)

qt5_use_modules(eea_ui_lib Widgets ...)

add_subdirectory(schematic)
...
---8<---
./source/eea/ui/schematic/CMakeLists.txt:
project(eea_ui_schematic)
...
set(eea_ui_schematic_SOURCE schematics_view.cpp ...)
add_library(eea_ui_schematic_lib STATIC
     ${eea_ui_schematic_SOURCE}
     ...
)

qt5_use_modules(eea_ui_schematic_lib Widgets ...)

So far, so good - all compiles.



With
---8<---
./source/eea/ui/mainwindow_private.cpp :
...
createWindows() {
     SchematicView* schematicView = new SchematicView(q);
     ...
}

---8<---
./source/eea/ui/graphics_view.cpp:
GraphicsView::GraphicsView(QWidget* parent) { ...  }

---8<---
./source/eea/ui/schematic/schematic_view.cpp
class SchematicView
: public GraphicsView
{ .... }


I got the linker error:

../../lib/libeea_ui_lib.a(mainwindow_private.cpp.o): In function 
`eea::ui::MainWindowPrivate::createWindows()':
mainwindow_private.cpp:(.text+0xbb): warning: undefined reference to 
`eea::ui::SchematicView::SchematicView(QWidget*)'

So, what happened here and how to solve it? Before the contents of 
ui/schematic moved into the ui directory/project and I've got no errors.

Thanks,
Olaf


More information about the CMake mailing list