欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cmake工具在linux平台下面的使用

程序员文章站 2022-06-05 21:02:28
...

在windows下用vs管理项目,在linux下用cmake

通过情况下用cmake维护makefile文件用得比较多,也可以用别的

使用cmake的好处:

在不同平台下生成对应的makefile文件
每次写一遍就行

cmake使用方法:

linux下通过 sudo apt-get install cmake安装

cmakelists会把一个目录作为一个整体使用,使用cmake最主要的工作就是维护和编写cmakelists

一般mkdir build cd build先生成一个build目录
在build目录处理
在build里cmake …生成makefile文件
最后输入make即可

使用cmake的具体示例:

src放主逻辑,utility放辅助功能
未解决的问题:
在本示例中有使用的第三方库未做处理(一般事先安装好,如果报错还是要自己安装索性自己安装好在cmake中不体现)

根目录下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)  // 至少需要cmake版本
PROJECT(Socket)						//工程名称起名,没有太多意义
SET(CMAKE_C_COMPILER gcc)			//设置C编辑器
SET(CMAKE_CXX_COMPILER g++)			//设置C++编辑器
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -fdiagnostics-color=auto -pthread -fexceptions -Wno-unused-local-typedefs -Wreorder -Wall -Wextra -Wpointer-arith -Wcast-qual -Wunreachable-code -Wno-deprecated -Wundef -Wdouble-promotion -Woverloaded-virtual -Wunused-parameter -Wno-deprecated -g -fpic -fPIC")	 // 设置C++编辑选项
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -D_DEBUG -00 --ggdb"}  //设置C++debug版本编辑选项 --D_DEBUG宏 --ggdb生成debug信息
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -D_DEBUG -02"}	//设置C++release编辑选项 -02表示优化级别
ADD_DEFINITIONS(-DPROTOBUF_INLINE_NOT_IN_HEADERS=0)  //需要预定义的宏
SET(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../")		//工程选项根目录,CMAKE_SOURCE_DIR为当前目录
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/")  //可执行文件生成位置
SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/")		//库文件生成位置

INCLUDE_DIRECTORIES($ENV{GSL_ROOT}/include /usr/include/lua5.3 /usr/include/lua5.2)  //将不同位置第三方库文件包含进来,默认会去 /usr/include /usr/local/include 位置进行搜索
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/lib/)	//编译链接时能搜索到自己的库,上面生成的lib库在这里链接
INCLUDE_DIRECTORIES(${PROJECT_ROOT_PATH}/)	//包含特殊头文件
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/utility)
INCLUDE_DIRECTORIES(.)

ADD_SUBDIRECTORY(utility)	//增加子文件夹,有顺序关系,在这里先编译utility辅助对应库再编译src可执行文件
ADD_SUBDIRECTORY(src)

子目录下:

FILE(GLOB SOURCE_UTILITY "./*.cpp")	//GLOB表示查找所有.cpp结尾的文件,放到SOURCE_UTILITY里
ADD_LIBRARY(utility STATIC ${SOURCE_UTILITY}) //生成一个叫utility的静态库
ADD_EXECUTABLE(main main.cpp)	//生成一个可执行文件,需要main.cpp也可以往后加
TARGET_LINK_LIBRARIES(main utility)		//生成main需要对应的库,utility为之前生成的所以需要先生成utility