cmake 的编写

在linux中编写C++代码时,使用cmake能够更好的管理编译我们编写的代码,下面我将编写CMakeLists.txt基本的框架

main.cpp

#include <iostream>

using namespace std;

int main(int argc,char *argv[])

{

cout<<"Hello World!"<<endl;

return 0;

}

vim CMakeLists.txt


PROJECT(TEST) //工程名

CMAKE_MINIMUM_REQUIRED(VERSION 2.8) //cmake版本的要求

SET(SRC_LIST main.cpp) //源文件

MESSAGE(STATUS "This is a demo") //执行cmake 命令时添加打印信息

ADD_EXECUTABLE(test ${SRC_LIST}) //test 为可执行文件名,将SRC_LIST(所有的源文件)编译成可执行文件test

在当前目录下新建一个build目录

>mkdir build

>cd build

>cmake ..

就会在build目录下生成cmake相关的文件,以及生成makefile,然后执行make命令,就会生成可执行文件test

>make


上面只是一个简单CMakeLists的编写

如果要添加相应的库目录,以及include目录

例如使用OCCI连接Oracle数据库,要添加occi include目录

SET(OCCI_INCLUDE "/usr/include/oracle/12.1/client64")

INCLUDE_DIRECTORIES(${OCCI_INCLUDE})

LINK_DIRECTORIES(/usr/lib/oracle/12.1/client64/lib)

链接库文件

SET(REQ_LIB occi sqlplus pthread)

TARGET_LINK_LIBRARIES(test ${REQ_LIB})


在每个.cpp目录都需要有一个CMakeLists.txt文件


生成共享库

SET(LIBHELLO_SRC main.cpp)

ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) //生成动态库

ADD_LIBRARY(hello  STATIC ${LIBHELLO_SRC}) //生成静态库

执行cmake命令将会生成libhello.so共享库

SET_TARGET_PROPERTIES(hello PROPERTIESVERSION1.2SOVERSION 1)
VERSION 指代动态库版本,SOVERSION 指代 API 版本。
将上述指令加入 lib/CMakeLists.txt 中,重新构建看看结果。
在 build/lib 目录会生成:
libhello.so.1.2
libhello.so.1->libhello.so.1.2
libhello.so ->libhello.so.1

TARGET_LINK_LIBRARIES(main  libhello.so)
这里的 hello 指的是我们上一节构建的共享库 libhello.



添加编译选项,编译成Debug版本或者Release版本

OPTION(DEBUG
  "Build the project using debugging mode"
  OFF)

IF(DEBUG)
  MESSAGE(STATUS "Adding Debug flag...")
  ADD_DEFINITIONS(-D_DEBUG -DDEBUG -O0 -g -ggdb)
  SET(CMAKE_BUILD_TYPE Debug)
  SET(BTYPE ${CMAKE_BUILD_TYPE})
  MESSAGE(STATUS "Build type is " ${CMAKE_BUILD_TYPE})
ELSE(DEBUG)
  MESSAGE(STATUS "Adding Release flag...")
  ADD_DEFINITIONS(-D_RELEASE -DRELEASE -O3)
  SET(CMAKE_BUILD_TYPE Release)
  SET(BTYPE ${CMAKE_BUILD_TYPE})
  MESSAGE(STATUS "Build type is " ${CMAKE_BUILD_TYPE})
ENDIF(DEBUG)


编译时

cmake .. -DDEBUG=ON //编译DEBUG版本

cmake .. -DDEBUG=OF     //编译Release版本


AUX_SOURCE_DIRECTORY
基本语法是:
AUX_SOURCE_DIRECTORY(dir VARIABLE)
作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来
自动构建源文件列表。因为目前 cmake 还不能自动发现新添加的源文件。
比如
AUX_SOURCE_DIRECTORY(.SRC_LIST)
ADD_EXECUTABLE(main ${SRC_LIST})


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值