[CMake] Use of ExternalProject_Add to build another CMake based project
Michael Jackson
mike.jackson at bluequartz.net
Wed Mar 24 17:10:40 EDT 2010
What all is needed in a CMake project to make it work correctly/better
with ExternalProject_Add(). Here is what I am trying. Project A
(Boost) should be built before Project B (MXA). I used to do all this
manually but I started looking at ExternalProject_Add() to see if that
could help me and others build my project easier.
I simply have the following in a CMakeLists.txt file
project (Combined)
cmake_minimum_required(VERSION 2.8)
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )
# --------- Setup the Executable output Directory -------------
SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )
# --------- Setup the Executable output Directory -------------
SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )
set (EP_BASE "Boost")
ExternalProject_Add(
Boost
TMP_DIR Boost/tmp
STAMP_DIR Boost/stamp
DOWNLOAD_DIR Boost/Download
DOWNLOAD_COMMAND ""
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../MXABoost
CMAKE_ARGS -DBOOST_INCLUDE_INSTALL_DIR=include/boost-1_36 -
DBUILD_SOVERSIONED=OFF -DBOOST_LIB_INSTALL_DIR=lib -DENABLE_DEBUG=ON -
DENABLE_MULTI_THREADED=ON -DENABLE_RELEASE=ON -DENABLE_SHARED=OFF -
DENABLE_SINGLE_THREADED=OFF -DENABLE_STATIC=ON -DINSTALL_VERSIONED=OFF
-DWITH_MPI=OFF -DWITH_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=$
{PROJECT_BINARY_DIR}/Boost/Install
BINARY_DIR Boost/Build
BUILD_COMMAND make -j16
INSTALL_DIR Boost/Install
)
set ($ENV{BOOST_ROOT} "${PROJECT_BINARY_DIR}/Boost/Install")
set (BOOST_ROOT "${PROJECT_BINARY_DIR}/Boost/Install")
# ---------- Find Boost Headers/Libraries -----------------------
SET (Boost_FIND_REQUIRED TRUE)
SET (Boost_FIND_QUIETLY TRUE)
set (Boost_USE_MULTITHREADED TRUE)
set (Boost_USE_STATIC_LIBS TRUE)
SET (Boost_ADDITIONAL_VERSIONS "1.36" "1.36.0" "1.41" "1.41.0" "1.39"
"1.39.0")
# --------------------------------------------------------------------
# MXA_BOOST_HEADERS_ONLY determines if any boost libraries are going to
# be found with the boost headers. For MXADataModel itself NO boost
# libraries are required but if you choose to build the ImportGenerator
# program then you will need the boost program_options library.
if ( NOT MXA_BOOST_HEADERS_ONLY)
set (MXA_BOOST_COMPONENTS program_options )
endif()
include(${PROJECT_BINARY_DIR}/Boost/Install/share/cmake/boost/
BoostConfig.cmake)
#FIND_PACKAGE(Boost COMPONENTS ${MXA_BOOST_COMPONENTS} )
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
#------ END CMAKELISTS.TXT FILE -------------
The problem becomes none of the normal BoostConfig.cmake or anything
else is available at cmake time? At least not the first time through
because Boost is NOT built yet. This seems like a chicken-and-egg
thing going on but I am sure I am just missing something. Or maybe
this was not the intent of ExternalProject_Add and we should just use
"add_subdirs()" instead?
Help..
___________________________________________________________
Mike Jackson www.bluequartz.net
Principal Software Engineer mike.jackson at bluequartz.net
BlueQuartz Software Dayton, Ohio
More information about the CMake
mailing list