概述
是个编译构建工具,相当于对makefile以及其之下的g++/gcc包装了一层。makefile语法比较难记,而cmake比较容易,适合用来编译大型项目。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13
| cmake_minimum_required(VERSION 3.0.0)
project(distributed-system-framework) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
include_directories(${PROJECT_SOURCE_DIR}/include) include_directories(${PROJECT_SOURCE_DIR}/include/utils) include_directories(${PROJECT_SOURCE_DIR}/include/logger)
add_subdirectory(src)
|
尝试
首先文件名是CMakeLists.txt,严格大小写。
写一个hello world,用cmake编译。
1 2 3 4 5 6 7 8 9 10 11 12
| cmake_minimum_required(VERSION 3.0.0) project(helloworld)
aux_source_directory(. SRC)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
add_definitions("-g")
add_executable(helloworld ${SRC})
|
1 2 3 4 5 6 7 8 9
| #include<stdio.h> int main() { printf("\033[35mhello\n"); printf("\033[36mhello\n"); printf("\033[37mhello\n"); return 0; }
|
1 2 3 4 5 6 7 8
| mkdir build cd build cmake .. make
cd ../bin ./helloworld
|
重写muduo项目下的cmake
1 2 3 4 5 6 7 8 9 10 11
| cmake_minimum_required(VERSION 2.5) project(mymuduo)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -fPIC")
aux_source_directory(. SRC_LIST)
add_library(mymuduo SHARED ${SRC_LIST})
|