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.jack...@bluequartz.net
BlueQuartz Software               Dayton, Ohio


_______________________________________________
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

Reply via email to