cmake简用
更新日期:
如果你厌烦了编写复杂的makefile,那你可以使用cmake。只需要简单的几行代码,cmake就可以帮你自动生成makefile,进而完成复杂的编译工作,而且cmake是夸平台的,不仅可以在linux下使用也可以在windows下使用,最简单的cmake
CMakeLists.txt
1 | project(main) |
aux_source_directory(. DIR_SRCS)把当前目录的所以源文件加入DIR_SRCS变量,add_executable(main ${DIR_SRCS})把源文件编译生成可执行文件main。
cmake的语法有很多,你几乎可以把他看成一个脚本语言,下面仅记录一下常用的方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62project(myexe)
cmake_minimum_required(VERSION 2.8)
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
#设置编译模式
set(CMAKE_BUILD_TYPE Debug)
endif()
#设置输出目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(CXX_FLAGS_COMMON "$ENV{CXXFLAGS} $ENV{EAGLE_OPTIONS} -Wall -Wno-deprecated -Werror -pipe")
message(STATUS "编译类型:${CMAKE_BUILD_TYPE}")
#设置编译选项
set(CXX_FLAGS_OPTIMIZE "-O2")
set(CMAKE_CXX_FLAGS_DEBUG "${CXX_FLAGS_COMMON} -g -D_GM")
set(CMAKE_CXX_FLAGS_RELEASE "${CXX_FLAGS_COMMON} -g ")
#包含文件目录
include_directories(
${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/base
)
#库文件目录
link_directories(
${CMAKE_BINARY_DIR}/lib
${CMAKE_BINARY_DIR}/lib/zlib
)
#设置优先链接
#set(CMAKE_FIND_LIBRARY_SUFFIXES .a${CMAKE_FIND_LIBRARY_SUFFIXES})
#设置公共链接库
set(COMMON_LINK_LIBS pthread z)
#执行脚本命令
execute_process(COMMAND chmod u+x ${CMAKE_SOURCE_DIR}/protoc)
#构建额外目标
set(PROTO_IN msg.proto)
set(PROTO_SRC msg.pb.cc)
set(PROTO_OUT msg.pb.h msg.pb.cc)
add_custom_command(
OUTPUT ${PROTO_OUT}
COMMAND protoc --cpp_out=. ${PROTO_IN}
DEPENDS ${PROTO_IN}
)
add_custom_target(proto DEPENDS ${PROTO_OUT})
#构建子目录
add_subdirectory(base)
aux_source_directory(. SRC_LIST)
list(APPEND SRC_LIST
${PROTO_SRC}
)
#add_library(myexe STATIC ${SRC_LIST})
add_executable(myexe ${SRC_LIST})
#设置依赖项
add_dependencies(myexe proto)
target_link_libraries(myexe ${COMMON_LINK_LIBS})
cmake的基础应用应该都在上面了,参考文章:
http://name5566.com/1795.html
http://blog.atime.me/note/cmake.html#b27395
http://blog.csdn.net/wzzfeitian/article/details/40963457/
http://blog.atime.me/note/cmake.html