CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice. The suite of CMake tools were created by Kitware in response to the need for a powerful, cross-platform build environment for open-source projects such as ITK and VTK.
# include header dirs include_directories(${CMAKE_SOURCE_DIR}) # project dir include_directories(${CMAKE_SOURCE_DIR}/third-party/include) # project dir include_directories(${CMAKE_CURRENT_BINARY_DIR}) # current CMakeLists.txt dir (including sub dir)
# link lib dirs link_directories(${CMAKE_SOURCE_DIR}/third-party/lib) link_directories(${LIBRARY_OUTPUT_PATH}) # generate in building
# include header dirs include_directories(${CMAKE_SOURCE_DIR}) # project dir include_directories(${CMAKE_SOURCE_DIR}/third-party/include) # project dir include_directories(${CMAKE_CURRENT_BINARY_DIR}) # current CMakeLists.txt dir (including sub dir)
$ cmake .. -- The CXX compiler identification is GNU 4.8.5 -- The C compiler identification is GNU 4.8.5 -- Check for working CXX compiler:/usr/local/bin/c++ -- Check for working CXX compiler:/usr/local/bin/c++ - works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Check for working C compiler:/usr/local/bin/gcc -- Check for working C compiler:/usr/local/bin/gcc - works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- CMAKE_BUILD_TYPE:Debug -- CMAKE_SYSTEM_NAME:Linux -- XENABLE_TEST3:OFF -- Looking for pthread.h -- Looking for pthread.h - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- Configuring done -- Generating done -- Build files have been written to:/mnt/centos-share/workspace/mux/cbuild
$ make -j4 Scanning dependencies of target mbase [ 5%] Building CXX object mbase/CMakeFiles/mbase.dir/src/packet.cc.o [ 11%] Linking CXX static library ../lib/libmbase.a [ 11%] Built target mbase Scanning dependencies of target msghandler Scanning dependencies of target epoll [ 17%] Building CXX object message_handle/CMakeFiles/msghandler.dir/src/message_handler.cc.o [ 23%] Building CXX object epoll/CMakeFiles/epoll.dir/src/epoll_tcp_client.cc.o [ 29%] Building CXX object epoll/CMakeFiles/epoll.dir/src/epoll_tcp_server.cc.o [ 35%] Linking CXX static library ../lib/libepoll.a [ 41%] Linking CXX static library ../lib/libmsghandler.a [ 41%] Built target msghandler [ 41%] Built target epoll Scanning dependencies of target transport [ 47%] Building CXX object transport/CMakeFiles/transport.dir/src/tcp_transport.cc.o [ 52%] Linking CXX static library ../lib/libtransport.a [ 52%] Built target transport Scanning dependencies of target echo_client Scanning dependencies of target echo_server Scanning dependencies of target bench_client Scanning dependencies of target bench_server [ 58%] Building CXX object demo/echo/CMakeFiles/echo_client.dir/client.cc.o [ 64%] Building CXX object demo/bench/CMakeFiles/bench_client.dir/client.cc.o [ 70%] Building CXX object demo/echo/CMakeFiles/echo_server.dir/echo_server.cc.o [ 76%] Building CXX object demo/bench/CMakeFiles/bench_server.dir/bench_server.cc.o [ 82%] Linking CXX executable ../../bin/echo_client [ 88%] Linking CXX executable ../../bin/echo_server [ 94%] Linking CXX executable ../../bin/bench_server [100%] Linking CXX executable ../../bin/bench_client [100%] Built target echo_client [100%] Built target echo_server [100%] Built target bench_client [100%] Built target bench_server
看看生成了啥:
1 2 3 4 5
$ ls cbuild/bin/ bench_client bench_server echo_client echo_server
$ ls cbuild/lib/ libepoll.a libmbase.a libmsghandler.a libtransport.a