cmake简用

本文详细介绍CMake的基础用法,包括如何设置编译选项、管理输出目录、处理依赖关系等,并提供了一个实用的例子来演示如何利用CMake进行项目的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你厌烦了编写复杂的makefile,那你可以使用cmake。只需要简单的几行代码,cmake就可以帮你自动生成makefile,进而完成复杂的编译工作,而且cmake是夸平台的,不仅可以在linux下使用也可以在windows下使用,最简单的cmake

CMakeLists.txt

project(main)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. DIR_SRCS)
add_executable(main ${DIR_SRCS})


aux_source_directory(. DIR_SRCS)把当前目录的所以源文件加入DIR_SRCS变量,add_executable(main ${DIR_SRCS})把源文件编译生成可执行文件main。
cmake的语法有很多,你几乎可以把他看成一个脚本语言,下面仅记录一下常用的方法:

project(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.youkuaiyun.com/wzzfeitian/article/details/40963457/
http://blog.atime.me/note/cmake.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值