[CMake] Building a project with Subdirs(Qt4 and OpenCascade inside)

Christian Lohr aequinoktikum at googlemail.com
Tue Aug 31 09:03:45 EDT 2010


Hi,
I have a more or less complicated program to compile. It's splitted up
in several small libraries, which have seperate directories for header
and source files, and a main applikation.
It compiled, but it ended up with a linker error, seems he couldn't
link against OpenCASCADE and Qt properly.
It's divided in:

applikation                     // <- is the main application, depends
on "baselib", "importlib", "lodlib" and "representationlib"

baselib
baselib/inc
baselib/src

importlib                         // <- uses OpenCascade, and QtCore
depends on "baselib"
importlib/inc
importlib/src

lodlib                               // <- uses QtCore(only the class
QString), depends on "baselib"
lodlib/inc
lodlib/src

representationlib                // <- uses QtGui and QtOpenGL,
depends on "baselib"
representationlib/inc
representationlib/src

-----------------------------------------lodlib/CMakeLists.txt
---------------------------------------------------------------------
project(lodlib)

cmake_minimum_required(VERSION 2.6.0)
find_package(Qt4 COMPONENTS QtCore REQUIRED)
include(${QT_USE_FILE})

set(lodlib_SRCS
	inc/drawsettings.h
	inc/gridbox.h
	inc/node.h
	inc/quader.h
	inc/vertextree.h
	src/drawsettings.cpp
	src/gridbox.cpp
	src/node.cpp
	src/quader.cpp
	src/vertextree.cpp
)

include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_library(lodlib STATIC ${lodlib_SRCS})

-------------------------------applikation/CMakeLists.txt
------------------------------------------------------------

project(applikation)

cmake_minimum_required(VERSION 2.6.0)
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR})
find_package(OpenCASCADE REQUIRED)

set(applikations_SRCS
	main.cpp
)

include_directories(${CMAKE_CURRENT_BINARY_DIR})

add_executable(applikation ${applikations_SRCS})
target_link_libraries(applikation ${QT_LIBRARIES})
target_link_libraries(applikation baselib importlib lodlib representationlib)

-------------------------------------------------
baselib/CMakeLists.txt
----------------------------------------------------------------------------------

project(baselib)

cmake_minimum_required(VERSION 2.6.0)

set(baselib_SRCS
	inc/triangle.h
	inc/vector3f.h
	inc/vertex3f.h
	src/vector3f.cpp
	src/vertex3f.cpp
)

add_library(baselib STATIC ${baselib_SRCS})

--------------------------------------------- importlib/CMakeLists.txt
---------------------------------------------------------------------------------------

project(importlib)

cmake_minimum_required(VERSION 2.6.0)
find_package(Qt4 COMPONENTS QtCore REQUIRED)

# OpenCASCADE
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR})
find_package(OpenCASCADE REQUIRED)

include(${QT_USE_FILE})

set(importlib_SRCS
	inc/abstractreader.h
	inc/stepreader.h
	inc/stlreader.h
	src/abstractreader.cpp
	src/stepreader.cpp
	src/stlreader.cpp
)

include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_library(importlib STATIC ${importlib_SRCS})

--------------------------------------------
representationlib/CMakeLists.txt
------------------------------------------------------------------------------------------

project(representationlib)

cmake_minimum_required(VERSION 2.6.0)

find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})

set(representationlib_SRCS
	src/representationwindow.cpp
)

set(representationlib_HDRS
	inc/representationwindow.h
)

qt4_wrap_cpp(representationlib_SRCS ${representationlib_HDRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

add_library(representationlib STATIC ${representationlib_SRCS})

----------------------------------------------- ./CMakeLists.txt
-----------------------------------------------------------------------------------------------

project(PackAssi)

cmake_minimum_required(VERSION 2.6.0)

include_directories(baselib/inc)
include_directories(importlib/inc)
include_directories(lodlib/inc)
include_directories(representationlib/inc)

link_directories(baselib/src)
link_directories(importlib/src)
link_directories(lodlib/src)
link_directories(representationlib/src)

add_subdirectory(applikation)
add_subdirectory(baselib)
add_subdirectory(importlib)
add_subdirectory(lodlib)
add_subdirectory(representationlib)

---------------------------------------------------------
FindOpenCASCADE.cmake (several places)
---------------------------------------------
# - try to find OpenCascade Library and include files
# OPENCASCADE_INCLUDE_DIR where to find Standard.hxx, etc.
# OPENCASCADE_LIBRARIES libraries to link against
# OPENCASCADE_FOUND If false, do not try to use OPENCASCADE

#=============================================================================
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#
# Created by Christian Lohr
#=============================================================================

FIND_PATH ( OPENCASCADE_INCLUDE_DIR Standard.hxx PATHS
                /usr/include/opencascade
                /usr/local/include/opencascade
                $ENV{CASROOT}/inc
)

INCLUDE_DIRECTORIES(/usr/include/opencascade ${OPENCASCADE_INCLUDE_DIR})

IF( WIN32 )
        ADD_DEFINITIONS(-DWNT)
ENDIF( WIN32 )

FIND_LIBRARY( OPENCASCADE_LIB_TKERNEL		NAMES TKernel PATHS
$ENV{CASROOT}/win32/lib)
FIND_LIBRARY( OPENCASCADE_LIB_TKMATH		NAMES TKMath PATHS
$ENV{CASROOT}/win32/lib)
FIND_LIBRARY( OPENCASCADE_LIB_TKSTEP		NAMES TKSTEP PATHS
$ENV{CASROOT}/win32/lib)
FIND_LIBRARY( OPENCASCADE_LIB_TKSTL		NAMES TKSTL PATHS $ENV{CASROOT}/win32/lib)
FIND_LIBRARY( OPENCASCADE_LIB_TKXBASE		NAMES TKXSBase PATHS
$ENV{CASROOT}/win32/lib)
FIND_LIBRARY( OPENCASCADE_LIB_TKTOPALGO		NAMES TKTopAlgo PATHS
$ENV{CASROOT}/win32/lib)
FIND_LIBRARY( OPENCASCADE_LIB_TKBREP		NAMES TKBRep PATHS
$ENV{CASROOT}/win32/lib)

SET( OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES}
        ${OPENCASCADE_LIB_TKERNEL}
        ${OPENCASCADE_LIB_TKMATH}
        ${OPENCASCADE_LIB_TKSTEP}
        ${OPENCASCADE_LIB_TKSTL}
        ${OPENCASCADE_LIB_TKXBASE}
        ${OPENCASCADE_LIB_TKTOPALGO}
        ${OPENCASCADE_LIB_TKBREP}
)


More information about the CMake mailing list