[CMake] Beginner's Question: Organizing Projects
Dominik Gabi
dkgispam at gmail.com
Wed Oct 27 08:02:02 EDT 2010
Hi,
after reading the tutorial I've decided to make my own project using
cmake but I'm having some troubles here. I'd like to organize my project
as follows:
Pixels/
CMakeLists.txt (0)
Pixels.cpp
geometry/
CMakeLists.txt (1)
Vector.h Vector.cpp ...
ui/
CMakeLists.txt (2)
MainWindow.h MainWindow.cpp ...
The dependencies are the following: the geometry package should be self
sufficient. The ui package needs the geometry library, gtkmm etc. and
Pixels.cpp for now just calls a static method in MainWindow therefore
depends only on ui.
I've spent the past few hours trying to get everything to compile but I
always end up with some cmake or linker error :(
Here's what I've come up with so far:
### CMakeLists.txt (1)
add_library(Geometry Vector.h Vector.cpp ...)
### CMakeLists.txt (2)
add_library(Ui MainWindow.h MainWindow.cpp ...)
# Geometry
include_directories(${PIXELS_SRC_DIR}/geometry)
link_directories(${PIXELS_BIN_DIR}/geometry)
target_link_libraries(Ui Geometry)
find_package(PkgConfig)
# GTKMM
pkg_check_modules(GTKMM gtkmm-2.4)
include_directories(${GTKMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS})
target_link_libraries(Ui ${GTKMM_LIBRARIES})
# GTKGLEXTMM
pkg_check_modules(GLEXT gtkglextmm-1.2)
include_directories(${GLEXT_INCLUDE_DIRS})
link_directories(${GLEXT_LIBRARY_DIRS})
target_link_libraries(Ui ${GLEXT_LIBRARIES})
### CMakeLists.txt (0)
cmake_minimum_required(VERSION 2.8)
project(Pixels)
set(PIXELS_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(PIXELS_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR})
add_executable(Pixels Pixels.cpp)
include_directories(${PIXELS_SRC_DIR}/ui)
add_subdirectory(${PIXELS_SRC_DIR}/ui)
target_link_libraries(Pixels Ui)
### end
Unfortunately, this results in a ton of errors such as
make[2]: *** [CMakeFiles/Pixels.dir/Pixels.cpp.o] Error 1
make[1]: *** [CMakeFiles/Pixels.dir/all] Error 2
make: *** [all] Error 2
"Gtk has not been declared", "Vector.h: no such file or directory".
Obviously I'm not doing it right ;)
The question then is: What am I doing wrong?
Thanks,
Dominik.
More information about the CMake
mailing list