We use CMake for everything and initially wrote our own CMakeLists.txt to drive the Poco build
As our (single) CMakeLists file became more unmanageable we made the decision to not try and replicate any third party's build instruction, but to use CMake's external_project() macro.
For example this is how we compile poco on Linux, Darwin and Windows
- Code: Select all
# Don't need to build static libraries
SET(POCO_TARGET shared_release)
IF ( ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
SET(POCO_TARGET shared_debug)
ENDIF ( ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
# Poco
IF (CMAKE_SYSTEM MATCHES "Linux")
ExternalProject_Add(
${POCO}
PREFIX exports
URL ${PROJECT_SOURCE_DIR}/lib/${POCO}
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ../${POCO}/configure --no-samples --omit=Data/MySQL,Data/ODBC,Zip --cflags="-m32" --config=HLLinux32
BUILD_COMMAND make DEFAULT_TARGET=${POCO_TARGET}
TEST_BEFORE_INSTALL 1
TEST_COMMAND make tests DEFAULT_TARGET=${POCO_TARGET}
INSTALL_COMMAND make install DEFAULT_TARGET=${POCO_TARGET} INSTALLDIR="${PROJECT_BINARY_DIR}/exports"
)
INSTALL(
FILES
${PROJECT_BINARY_DIR}/exports/lib/libPocoCrypto${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoData${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoDataSQLite${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoFoundation${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoNet${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoNetSSL${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoUtil${DBG}.so.12
${PROJECT_BINARY_DIR}/exports/lib/libPocoXML${DBG}.so.12
DESTINATION lib
)
ELSEIF (CMAKE_SYSTEM MATCHES "Darwin")
ExternalProject_Add(
${POCO}
PREFIX exports
URL ${PROJECT_SOURCE_DIR}/lib/${POCO}
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ../${POCO}/configure --omit=Data/MySQL,Data/ODBC,Zip --config=Darwin-clang
BUILD_COMMAND make DEFAULT_TARGET=${POCO_TARGET}
TEST_BEFORE_INSTALL 1
TEST_COMMAND make tests DEFAULT_TARGET=${POCO_TARGET}
INSTALL_COMMAND make install DEFAULT_TARGET=${POCO_TARGET} INSTALLDIR="${PROJECT_BINARY_DIR}/exports"
)
ELSEIF (CMAKE_SYSTEM MATCHES "Windows")
IF ( ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
SET( POCO_BUILD_TYPE debug )
ELSE ( ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
SET( POCO_BUILD_TYPE release )
ENDIF ( ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
FILE(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} WINEXPORTS)
ExternalProject_Add(
${POCO}
PREFIX exports
URL ${PROJECT_SOURCE_DIR}/lib/${POCO}
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ""
BUILD_COMMAND buildwin.cmd 100 build shared ${POCO_BUILD_TYPE} Win32 nosamples
TEST_BEFORE_INSTALL 1
TEST_COMMAND ""
INSTALL_COMMAND nmake /F Makefile.nmake install INSTALLDIR=${WINEXPORTS} POCO_TARGET=${POCO_TARGET}
)
ENDIF (CMAKE_SYSTEM MATCHES "Linux")
To be honest I'm not sure if an embedded CMakeLists.txt file helps us - some of the third party code we need has them and its no easier by the time that we "fix" it to work with our expectations....