打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Cmake使用手册
CMAKE使用手册
简单例子:MAIN.C
我们以一个简单例子开始,逐步解析cmake的完整构建 过程 创建t1目录,在此目录下建立main.c main.c文件内容: //main.c #include int main() { printf(“Hello World from t1 Main!\n”); return 0; }

简单例子: CMAKELISTS.TXT
CMakeLists.txt,这个文件是cmake的构建定义文 件,文件名是大小写相关的,如果工程存在多个 目录,需要确保每个要管理的目录都存在一个 CMakeLists.txt 在t1目录建立CMakeLists.txt(注意文件名大小写) CmakeLists.txt文件内容:
PROJECT (HELLO) SET(SRC_LIST main.c) ADD_EXECUTABLE(hello SRC_LIST)

简单例子:语法规则
简单的解释构建文件CMakeLists.txt: PROJECT指令的语法是: PROJECT(projectname [CXX] [C] [Java]) 你可以用这个指令定义工程名称,并可指定工程支持 的语言,支持的语言列表是可以忽略的,默认情况表 示支持所有语言。 SET指令的语法是: SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 只需要了解SET指令可以用来显式的定义变量即可。比 如我们用到的是SET(SRC_LIST main.c),如果有多个源 文件,也可以定义成:SET(SRC_LIST main.c t1.c t2.c)。

简单例子:语法规则
ADD_EXECUTABLE(hello ${SRC_LIST}) 定义了这个工程会生成一个文件名为hello的可 执行文件,相关的源文件是SRC_LIST中定义的 源文件列表, 本例中你也可以直接写成 ADD_EXECUTABLE(hello main.c)。另外,变量 使用${}方式取值,但是在IF控制语句中是直接 使用变量名

简单例子:开始构建
在CMakeLists.txt所在目录下运行cmake . (注意命令后面的点号,代表本目录)。系统自动 生成了CMakeFiles, CMakeCache.txt, cmake_install.cmake等文件,并且生成了 Makefile. 在这个目录输入make命令. 这时候,我们需要的目标文件hello已经构建完成, 位于当前目录 运行一下:./hello 得到输出:Hello World from Main

构建多目录工程
创建目录tmp,在此目录下分别创建目录include、source目 录及main.c文件。 在source目录下创建目录a,在a目录下创建文件afile.c: 内容如下 #include "../../include/tmp.h" #include void func_a() { printf("this is func_a\n"); }

构建多目录工程
在source目录下创建目录b,在b目录下创建文件 bfile.c: 内容如下 #include "../../include/tmp.h" #include void func_b() { printf("this is func_b\n"); }

构建多目录工程
在include目录下创建文件tmp.h: 内容如下 void func_a(); void func_b(); 在tmp目录下创建文件main.c:内容如下 #include "include/tmp.h" int main() { func_a(); func_b(); return 0; }

构建多目录工程
在tmp目录下创建文件CMakeLists.txt,内容如下: PROJECT (TMP) ADD_DEFINITIONS(-DPOSIX) AUX_SOURCE_DIRECTORY(source/a DIR_SRC_A) AUX_SOURCE_DIRECTORY(source/b DIR_SRC_B) SET(TMP_SRCS main.c ${DIR_SRC_A} ${DIR_SRC_B}
) ADD_EXECUTABLE(main ${TMP_SRCS})

语法规则
ADD_DEFINITIONS 向C/C++编译器添加-D定义,比如: ADD_DEFINITIONS(-DENABLE_DEBUG),参数之间 用空格分割。 也可设置编译器参数,例如ADD_DEFINITIONS(-g) AUX_SOURCE_DIRECTORY 基本语法是: AUX_SOURCE_DIRECTORY(dir VARIABLE) 作用是发现一个目录下所有的源代码文件并将列表 存储

动态库构建
以前面多目录工程tmp为例,只要将CMakeLists.txt改为如 下即可: PROJECT (TMP) ADD_DEFINITIONS(-DPOSIX) ADD_DEFINITIONS(-DDEBUG) AUX_SOURCE_DIRECTORY(source/a DIR_SRC_A) AUX_SOURCE_DIRECTORY(source/b DIR_SRC_B) SET(TMP_SRCS ${DIR_SRC_A} ${DIR_SRC_B} ) ADD_LIBRARY(tmp SHARED ${TMP_SRCS})

静态库
以前面多目录工程tmp为例,只要将CMakeLists.txt改为如 下即可: PROJECT (TMP) ADD_DEFINITIONS(-DPOSIX) ADD_DEFINITIONS(-DDEBUG) AUX_SOURCE_DIRECTORY(source/a DIR_SRC_A) AUX_SOURCE_DIRECTORY(source/b DIR_SRC_B) SET(TMP_SRCS ${DIR_SRC_A} ${DIR_SRC_B} ) ADD_LIBRARY(tmp STATIC ${TMP_SRCS})

安装共享库和头文件
以安装动态共享库为例,只需在CMakeLists.txt添 加: INSTALL(TARGETS main LIBRARY DESTINATION lib) 通过:静态库则添加 INSTALL(TARGETS main ARCHIVE DESTINATION lib) 头文件安装命令: INSTALL(FILES include/tmp.h DESTINATION include/lib) 通过: cmake -DCMAKE_INSTALL_PREFIX=/usr . make make install 我们就可以将头文件和共享库安装到系统目录

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CMake 备忘清单
CMakeLists.txt 语法介绍与实例演练
CMake使用入门
在linux下使用CMake构建应用程序
Linux下CMake规则简明教程
CMake最最最核心用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服