我是靠谱客的博主 等待仙人掌,最近开发中收集的这篇文章主要介绍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 ()

最后

以上就是等待仙人掌为你收集整理的cmake常用指令的全部内容,希望文章能够帮你解决cmake常用指令所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部