[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