Roman Yakovenko wrote: > Hi. It seems that I cannot to find answer for pretty simple question: > how I can invoke native build system from\using CMake? Short answer is that you invoke the native build system as usual (make, nmake, etc).
Find attached a wrapper bash script I am using for cmake and normal Makefiles. It automatically creates out-of-source builds when run under cmake. For running it on windows, you will need something like cygwin or MSYS (for bash+uname), albeit it will probably not work as is, as I need to update the -m32/-m64 flags for VC8 (which I don't have). For docs, run: > mk -h PS. If you do any improvements to it, send me a patch. -- Gonzalo Garramuño [EMAIL PROTECTED] AMD4400 - ASUS48N-E GeForce7300GT Kubuntu Edgy
#!/bin/bash --norc # # Determine CPU architecture # KERNEL=`uname -s` RELEASE=`uname -r` export CMAKE_BUILD_ARCH=32 export CMAKE_BUILD_TYPE=Release arch=`uname -a` if [[ $arch == *x86_64* ]]; then CMAKE_BUILD_ARCH=64 else if [[ $arch == *ia64* ]]; then CMAKE_BUILD_ARCH=64 fi fi OS=$KERNEL-$RELEASE usage() { echo $0 echo "" echo "$0 [options] [--] [make options]" echo "" echo "Wrapper around CMake to easily create out of source" echo "builds (ie. compilations where everything goes into" echo "a BUILD/OS-VERSION-\$CMAKE_BUILD_TYPE-\$CMAKE_BUILD_ARCH directory." echo "" echo "For this platform (default settings): " echo " BUILD/$OS-$CMAKE_BUILD_TYPE-$CMAKE_BUILD_ARCH" echo "" echo "It must be run from a directory with a valid CMakeLists.txt" echo "file outside of the build tree." echo "" echo "Options:" echo "" echo " -q quiet build" echo " -j N number of cpus to use (default: ${CMAKE_PROCS=4})" echo "" echo " debug|release|reldebug|small" echo " debug - build a debug build" echo " release - build a release build (default)" echo " reldebug - build a release build with debug information" echo " small - build a small release build" echo "" echo " clean - Cleans Makefile and CMakeCache.txt" echo "" echo " both|32|64" echo " Builds both 32/64 bit versions, 32-bit only, " echo " 64-bit only (default: $CMAKE_BUILD_ARCH)" echo "" exit 1 } # # Parse command-line options # clean=0 opts='VERBOSE=1' while [ $# -gt 0 ]; do case $1 in clean) shift if [ -r CMakeLists.txt ]; then if [ -d BUILD ]; then clean=1 fi fi ;; debug) shift export CMAKE_BUILD_TYPE=Debug ;; release) shift export CMAKE_BUILD_TYPE=Release ;; small) shift export CMAKE_BUILD_TYPE=MinSizeRel ;; both) shift CMAKE_BUILD_ARCH='Both' ;; 64) shift CMAKE_BUILD_ARCH=64 export LDFLAGS= export CXXFLAGS= ;; 32) shift CMAKE_BUILD_ARCH=32 export LDFLAGS=-m32 export CXXFLAGS=-m32 ;; -h) shift usage ;; --help) shift usage ;; -j) shift if [ $# == 0 ]; then echo "Missing parameter for -j!" usage fi CMAKE_PROCS=$1 shift ;; -q) shift opts="" ;; --) shift break ;; *) break ;; esac done # # Simple function to run a command and print it out # run_cmd() { echo echo "> $*" echo command $* } # # Function to just run make on a dir with a Makefile # run_make() { cmd='' if [[ $KERNEL == *CYGWIN* ]]; then cmd="nmake $"@ else cmd="make -j ${CMAKE_PROCS=4} $@" fi run_cmd $cmd } # # Function to run cmake and then run make on generated Makefile # run_cmake() { builddir=$OS-$CMAKE_BUILD_TYPE-$CMAKE_BUILD_ARCH echo "Buildir ${builddir}" if [ ! -d $builddir ]; then cmd="mkdir $builddir $builddir/bin $builddir/lib" run_cmd $cmd fi cd $builddir cmd="cmake ../.. -DEXECUTABLE_OUTPUT_PATH=$PWD/bin -DLIBRARY_OUTPUT_PATH=$PWD/lib -DCMAKE_LIBRARY_PATH=$PWD/lib -DCMAKE_BUILD_ARCH=$CMAKE_BUILD_ARCH -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE" run_cmd $cmd run_make $@ cd .. } # # Function used to clean the build directory and exit # run_clean() { builddir=$OS-$CMAKE_BUILD_TYPE-$CMAKE_BUILD_ARCH echo "Cleaned BUILD/$builddir" rm -rf BUILD/$builddir exit 0 } # # Main routine # if [ $clean == 1 ]; then run_clean fi if [ -r Makefile ]; then run_make $opts $@ else if [ ! -r CMakeLists.txt ]; then usage fi if [ ! -d BUILD ]; then mkdir BUILD fi cd BUILD if [ $CMAKE_BUILD_ARCH == 'Both' ]; then export CMAKE_BUILD_ARCH=32 run_cmake $opts $@ export CMAKE_BUILD_ARCH=64 run_cmake $opts $@ else run_cmake $opts $@ fi fi
_______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake