cmake常用指令

CMake使用说明
Cmake常用的相对路径的一些变量如下:

比如当前的程序工程结构如下:
顶层目录 tcp_server
一层目录 build/ CMakeList.txt src/
二层目录 build/编译目录 src/CMakeList.txt src/*.cpp

编译的方式: cd/build 然后cmake … make -j5

这个时候对应的变量具体路径如下:
${PROJECT_SOURCE_DIR} 编译所在的目录 tcp_server
${CMAKE_BINARY_DIR} 所在目录 tcp_server/build
${CMAKE_CURRENT_SOURCE_DIR} 是指当前CMakeList所在的路径 tcp_server

常用的设置选项

以下设置主要是用户交叉编译,这样设置很方便。

CMAKE_C_COMPILER:指定C编译器
SET(CMAKE_C_COMPILER “ccache”)

CMAKE_CXX_COMPILER: 指定C++编译器
SET(CMAKE_CXX_COMPILER “ccache”)

CMAKE_BUILD_TYPE 编译类型 debug 或者release

CMAKE_CXX_FLAGS:设置 C++编译选项
#release
set(CMAKE_BUILD_TYPE “Release”)
set(CMAKE_CXX_FLAGS “-O3 -Wall -std=c++0x”)
#debug
set(CMAKE_BUILD_TYPE “Debug”)
set(CMAKE_CXX_FLAGS “-g -O1 -Wall -std=c++0x”) -g表示gdb

add_subdirectory 添加子目录, 通常顶层的CMakelist需要添加下一层的src
add_subdirectory(src)

支持条件判断Cmake
IF(XXXX)
XXXX
ENDIF()

INCLUDE
用来载入CMakeLists.txt文件,也用于载入预定义的 cmake 模块 *.cmake
include(${PROJECT_SOURCE_DIR}/…/…/build/libs-config.cmake)

cmake常用的一些方法
include_directories(路径) 包含对应的路径
link_directories(路径) 需要链接一些库,这些库所在的目录
ADD_EXECUTABLE(XXXX_EXE xx1.cpp xx2.cpp ) 生成对应的可执行程序
TARGET_LINK_LIBRARIES(XXXX_EXE xx.a xx2.a) 对应需要使用的库

set_target_properties(XXXX_EXE PROPERTIES RUNTIME_OUTPUT_DIRECTORY “…”)
设置属性,用来设置输出的名称,对于动态库,还可以用来指定动态库版本和 API 版本

cmake 在构建一个新的 target 时,会尝试清理掉其他使用这个名字的库,因为,在构建 libhello.a 时,就会清理掉 libhello.so,下面的属性设置解决此问题
set_target_properties(IoPortlib PROPERTIES CLEAN_DIRECT_OUTPUT 1)
但是如果你生成动态库与静态库的名字不一致,就可以不用设置这个属性。

把libhello_static.a 修改为libhello.a
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME “hello”)

SET(LIBHELLO_SRC hello.c alg.c show.c)

ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})

ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})
libname不能重复,所以不能为hello

可以同时得到 libhello.so/libhello.a 两个库

add_library(IoPort SHARED ${SRC_LIST}) 生成动态库
add_library(IoPortlib STATIC ${SRC_LIST}) 生成静态库

EXECUTABLE_OUTPUT_PATH :重新定义最终执行程序的存放目录
LIBRARY_OUTPUT_PATH:重新定义最终动态库/静态库的存放目录

如果是编译第三方库
include(ExternalProject) 加载ExternalProject
set(CONFIGURE_OPTS --enable-static=yes --enable-shared=no --disable-shared)、
设置configure参数
–enable-static:生成静态链接库
–enable-shared:生成动态链接库
–disable-shared 禁止构建共享库(默认启用)

以安装zookeeper为例

ExternalProject_Add(
libzookeeper_proj #命名
URL ${LIB_DOWNLOAD_URL}/zookeeper-3.4.10.tar.gz #对应的安装包路径
CONFIGURE_COMMAND ./configure --prefix=<INSTALL_DIR> ${ENABLE_STATIC} #配置安装目录
TEST_BEFORE_INSTALL 0
BUILD_IN_SOURCE 1
INSTALL_DIR ${LIB_INSTALL_PREFIX}/zookeeper #安装目录
INSTALL_COMMAND make install #安装命令
)

configure_file: 将一份文件拷贝到另一个位置并修改它的内容
configure_file ()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值