I'm trying to come up with a workable 'super build' for our programs,
using the ExternalProject module. I'm using CMake 2.8.0 -- not sure
if there's any substantive improvements in ExternalProject.cmake in
2.8.1 or CMake CVS.
In short, I want to build Tcl, Tk, VTK, ITK (with WrapITK), CableSwig
(for WrapITK). My application also depends on Qt, but I'm using an
installed binary for that
My strategy is to build everything using as close to a vanilla setup
as is possible, and have each package install using the project binary
directory as the install target. In other words, my top level
CMakeLists.txt, which includes all the ExternalProject_add macros,
sets CMAKE_INSTALL_PREFIX to CMAKE_CURRENT_BINARY_DIR
I've solved some problems for myself, but I'm running into several
confusing things:
1. VTK can't seem to build, at least with Wrapping turned on. The
problem seems to be that it tries to build the executable 'vtk' in
VTK-prefix/src/VTK-build/Wrapping/Tcl, which contains a directory
named 'vtk'
2. The included CMakeLists.txt seems to generate projects that build
in a non-deterministic, order. Sometimes Tcl builds first, Sometimes
CableSwig.
3. I'm confused about the interaction between CMAKE_INSTALL_PREFIX,
and the ExternalProject_add parameter INSTALL_DIR. If I give
INSTALL_DIR in the ExternalProject_add macro, it still tries to
install the programs in /usr/local. So now I explicitly set
CMAKE_INSTALL_PREFIX in the arguments to ExternalProject_add, but it
doesn't make sense that I should have to?
project(BRAINSTracer)
cmake_minimum_required(VERSION 2.8)
cmake_policy(VERSION 2.8)
set(CMAKE_VERBOSE_MAKEFILE on)
enable_testing()
include(Dart)
include(CPack)
include(ExternalProject)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
#set(CMAKE_BUNDLE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
find_package( Qt4 REQUIRED )
if(QT_USE_FILE)
include(${QT_USE_FILE})
set(QT_USE_QTXML 1)
else(QT_USE_FILE)
set( QT_LIBRARIES ${QT_QT_LIBRARY})
endif(QT_USE_FILE)
SET(QT_CMAKE_FLAGS
-DVTK_USE_QT:BOOL=ON
-DVTK_USE_QVTK:BOOL=ON
-DVTK_USE_GUISUPPORT:BOOL=ON
-DDESIRED_QT_VERSION:STRING=4
-DVTK_USE_QVTK_QTOPENGL:BOOL=ON
)
if(APPLE)
set(QT_CMAKE_FLAGS ${QT_CMAKE_FLAGS}
-DVTK_USE_CARBON:BOOL=OFF
-DVTK_USE_COCOA:BOOL=ON
-DVTK_USE_X:BOOL=OFF
)
set(LIB_EXT dylib)
set(EXTRA_TK_FLAGS
--enable-aqua
--enable-corefoundation
)
else(APPLE)
set(QT_CMAKE_FLAGS ${QT_CMAKE_FLAGS}
-DVTK_USE_CARBON:BOOL=OFF
-DVTK_USE_COCOA:BOOL=OFF
-DVTK_USE_X:BOOL=ON
)
set(LIB_EXT .so)
endif(APPLE)
# -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
SET(LOCAL_CMAKE_BUILD_OPTIONS
-DMAKECOMMAND:STRING=${MAKECOMMAND}
-DCMAKE_SKIP_RPATH:BOOL=ON
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DBUILD_EXAMPLES:BOOL=OFF
-DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-DBUILD_TESTING:BOOL=OFF
-DCMAKE_GENERATOR:STRING=${CMAKE_GENERATOR}
-DCMAKE_EXTRA_GENERATOR:STRING=${CMAKE_EXTRA_GENERATOR}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
-DCMAKE_BUNDLE_OUTPUT_DIRECTORY:PATH=${CMAKE_BUNDLE_OUTPUT_DIRECTORY}
-DLIBRARY_OUTPUT_PATH:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
-DEXECUTABLE_OUTPUT_PATH:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
-DDART_TESTING_TIMEOUT:STRING=${DART_TESTING_TIMEOUT}
-DMEMORYCHECK_COMMAND_OPTIONS:STRING=${MEMORYCHECK_COMMAND_OPTIONS}
-DMEMORYCHECK_COMMAND:PATH=${MEMORYCHECK_COMMAND}
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
-DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS}
-DSITE:STRING=${SITE}
-DBUILDNAME:STRING=${BUILDNAME}
${QT_CMAKE_FLAGS}
)
set(TCL_DEPEND tcl)
set(proj tcl)
ExternalProject_Add(${proj}
CVS_REPOSITORY ":pserver:anonymous:@tcl.cvs.sourceforge.net:/cvsroot/tcl"
CVS_TAG -r core-8-5-7
CVS_MODULE "tcl"
CONFIGURE_COMMAND CMAKE_C_COMPILER="${CMAKE_C_COMPILER}"
CMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
${CMAKE_CURRENT_BINARY_DIR}/TCL-prefix/src/TCL/unix/configure
--prefix=${CMAKE_CURRENT_BINARY_DIR}
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
UPDATE_COMMAND ""
)
set(buildTK True)
if(buildTK)
set(TK_DEPEND tk)
set(proj tk)
ExternalProject_Add(${proj}
CVS_REPOSITORY ":pserver:anonymous:@tcl.cvs.sourceforge.net:/cvsroot/tktoolkit"
CVS_TAG -r core-8-5-7
CVS_MODULE "tk"
CONFIGURE_COMMAND CMAKE_C_COMPILER="${CMAKE_C_COMPILER}"
CMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
${CMAKE_CURRENT_BINARY_DIR}/TK-prefix/src/TK/unix/configure
--prefix=${CMAKE_CURRENT_BINARY_DIR}
--with-tcl=${CMAKE_CURRENT_BINARY_DIR}/lib ${EXTRA_TK_FLAGS}
DEPENDS ${TCL_DEPEND}
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
UPDATE_COMMAND ""
)
else(buildTK)
set(TK_DEPEND "")
endif(buildTK)
#
# build VTK
set(VTK_DEPEND VTK)
set(proj VTK)
ExternalProject_Add(${proj}
CVS_REPOSITORY ":pserver:[email protected]:/cvsroot/VTK"
CVS_TAG -r VTK-5-4-2
CVS_MODULE "VTK"
CMAKE_ARGS ${LOCAL_CMAKE_BUILD_OPTIONS} -DVTK_WRAP_TCL:BOOL=ON
-DTCL_INCLUDE_PATH:PATH=${CMAKE_CURRENT_BINARY_DIR}/include
-DTCL_LIBRARY:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/lib/libtcl8.5.${LIB_EXT}
-DTCL_TCLSH:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/bin/tclsh8.5
-DVTK_USE_TK:BOOL=yes
-DTK_INCLUDE_PATH:PATH=${CMAKE_CURRENT_BINARY_DIR}/include
-DTK_LIBRARY:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/lib/libtk8.5.${LIB_EXT}
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${TCL_DEPEND} ${TK_DEPEND}
UPDATE_COMMAND ""
)
set(CABLESWIG_DEPEND CableSwig)
set(proj CableSwig)
ExternalProject_add(${proj}
CVS_REPOSITORY ":pserver:[email protected]:/cvsroot/CableSwig"
CVS_TAG -r ITK-3-16
CVS_MODULE "CableSwig"
CMAKE_ARGS ${LOCAL_CMAKE_BUILD_OPTIONS}
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
UPDATE_COMMAND ""
)
#
# build ITK
set(ITK_DEPEND Insight)
set(proj Insight)
ExternalProject_add(${proj}
CVS_REPOSITORY ":pserver:[email protected]:/cvsroot/Insight"
CVS_TAG -r ITK-3-16
CVS_MODULE "Insight"
CMAKE_ARGS ${LOCAL_CMAKE_BUILD_OPTIONS}
-DCableSwig_DIR:PATH=${CMAKE_INSTALL_PREFIX}/lib
-DTCL_INCLUDE_PATH:PATH=${CMAKE_CURRENT_BINARY_DIR}/include
-DUSE_WRAP_ITK:BOOL=ON
-DWRAP_ITK_TCL:BOOL=ON
-DWRAP_ITK_JAVA:BOOL=OFF
-DWRAP_ITK_PYTHON:BOOL=OFF
-DWRAP_complex_float:BOOL=OFF
-DWRAP_covariant_vector_float:BOOL=OFF
-DWRAP_float:BOOL=ON
-DWRAP_rgb_signed_short:BOOL=OFF
-DWRAP_rgb_unsigned_char:BOOL=OFF
-DWRAP_rgb_unsigned_short:BOOL=OFF
-DWRAP_signed_short:BOOL=ON
-DWRAP_unsigned_char:BOOL=ON
-DWRAP_unsigned_short:BOOL=OFF
-DWRAP_vector_float:BOOL=ON
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${CABLESWIG_DEPEND}
UPDATE_COMMAND ""
)
set(GenerateCLP_DIR ${CMAKE_INSTALL_PREFIX}/lib/GenerateCLP)
set(SEM_DEPEND SlicerExecutionModel)
set(proj SlicerExecutionModel)
ExternalProject_Add(${proj}
SVN_REPOSITORY "http://svn.slicer.org/Slicer3/trunk/Libs/SlicerExecutionModel"
SOURCE_DIR SlicerExecutionModel
BINARY_DIR SlicerExecutionModel-build
DEPENDS ${ITK_DEPEND}
CMAKE_GENERATOR ${gen}
CMAKE_ARGS
${LOCAL_CMAKE_BUILD_OPTIONS}
-DITK_DIR:PATH=${ITK_DIR}
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
)
set(proj BRAINSTracerQt)
ExternalProject_Add(${proj}
URL file://${CMAKE_CURRENT_SOURCE_DIR}/${proj}
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${proj}
BINARY_DIR ${proj}-build
DEPENDS ${VTK_DEPEND} ${SEM_DEPEND}
CMAKE_GENERATOR ${gen}
CMAKE_ARGS
${LOCAL_CMAKE_BUILD_OPTIONS}
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
)
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake