makefile之cmake入门
cmake是一款生成makefile的软件;在生成makefile之前,首先是写一个CMakeLists.txt文件;
以下为典型例子:
先看目录tree, 在test文件夹中有:include目录, source目录, 以及main.c
source目录下有afile.c, bfile.c
include目录下有temp.h
afile.c中:

#include "../include/temp.h"
#include <stdio.h>
void func_a()
{
printf("this is func_a test\n");
}

bfile.c中:

#include "../include/temp.h"
#include <stdio.h>
void func_b()
{
printf("this is func_b test\n");
}

temp.h中:
void func_a();
void func_b();
main.c中:

#include "include/temp.h"
int main()
{
func_a();
func_b(); printf("hello world\n");
return ;
}

在test目录下新建文件CMakeLists.txt, 内容如下:

PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) ADD_DEFINITIONS(-DENABLEDEBUG)
ADD_DEFINITITONS(-g) AUX_SOURCE_DIRECTORY(source SRC_DIR)
SET(MAIN_DIR main.c ${SRC_DIR}) ADD_EXECUTABLE(main ${MINI_DIR})

PROJECT指令的语法是:
SET指令的语法是:
只需要了解SET指令可以用来显式的定义变量即可。比如我们用到的是SET(SRC_LIST main.c),如果有多个源文件,也可以定义成:SET(SRC_LIST main.c t1.c t2.c)
ADD_EXECUTABLE(hello ${SRC_LIST})
定义了这个工程会生成一个文件名为hello的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表; ${}是表示取值;
向C/C++编译器添加-D定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG),参数之间用空格分割
ADD_DEFITIONS(-g)
AUX_SOURCE_DIRECTORY(dir VARIABLE)作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表
写完CMakeLists.txt之后;
cmake . 之后就可以发现生成了makefile;
make即可;
动态库构建

PROJECT (main)
ADD_DEFINITIONS(-DPOSIX)
ADD_DEFINITIONS(-DDEBUG) AUX_SOURCE_DIRECTORY(source DIR_SRC)
SET(MAIN_SRCS ${DIR_SRC}) ADD_LIBRARY(main SHARED ${MAIN_SRCS})

静态库构建

PROJECT (main)
ADD_DEFINITIONS(-DPOSIX)
ADD_DEFINITIONS(-DDEBUG) AUX_SOURCE_DIRECTORY(source DIR_SRC)
SET(MAIN_SRCS ${DIR_SRC}) ADD_LIBRARY(main STATIC ${MAIN_SRCS})

安装库和头文件
INSTALL(TARGETS main LIBRARY DESTINATION lib)
静态库则加入:
INSTALL(TARGETS main ARCHIVE DESTINATION lib)
INSTALL(FILES include/tmp.h DESTINATION include/lib)
3.通过:
cmake -DCMAKE_INSTALL_PREFIX=/usr .
make
make install
可以将头文件和共享库安装到系统目录/usr/lib和/usr/include中
makefile之cmake入门的更多相关文章
- CMake入门(二)
CMake入门(二) 最后更新日期:2014-04-25 by kagula 阅读前提:<CMake入门(一)>.Linux的基本操作 环境: Windows 8.1 64bit英文版.V ...
- CMake入门
CMake入门 CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似 ...
- CMake入门教程(转帖)
本文转自:https://www.cnblogs.com/never--more/p/6921837.html CMake入门教程 参考文献:http://www.ibm.com/developerw ...
- CMake入门-04-自定义编译选项
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! - 自定义编译选项 CMake 允许为项目增加编译选项,从而可以 ...
- C++ CMake 入门实战[转载]
C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...
- VScode 使用 CMake 入门
参考 CMake 入门实战 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . 执行命令 cmake PA ...
- CMake 入门实战 | HaHack
CMake 入门实战 | HaHack undefined
- make、makefile、cmake、qmake对比
作者:玟清链接:https://www.zhihu.com/question/27455963/answer/36722992来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- make ;makefile; cmake; qmake的区分
1. make 是用来执行Makefile的.2. Makefile是类unix环境下(比如Linux)的类似于批处理的"脚本"文件.其基本语法是: 目标+依赖+命令,只有在目标文 ...
随机推荐
- JavaEE Tutorials (22) - 事务
22.1Java EE应用中的事务35222.2什么是事务35322.3容器托管事务353 22.3.1事务属性354 22.3.2回滚容器托管事务357 22.3.3同步会话bean的实例变量357 ...
- Kruskal-Wallis Test and Friedman test
- jquery实现隐藏显示层动画效果、仿新浪字符动态输入、tab效果
已经有两年多没登陆csdn账号了,中间做了些旁的事,可是现在却还是回归程序,但改做前端了,虽然很多东西都已忘得差不多了,但还是应该摆正心态,慢慢来,在前端漫游,做一只快乐双鱼. 路是一步一步走出来的, ...
- HDU1506_Largest Rectangle in a Histogram
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- html系列教程--embed fieldset legend figure figurecaption
<embed> 标签:定义嵌入的内容 <embed src="" type="" /> embed属性: 1.src:嵌入内容地址 2. ...
- 图片的像素和Android的dp值之间的关系。
这是一个困扰我很就得问题.今天在我的反复摸索下,总结出了一些个规律. 以下测试以魅族mx5为例. 手机参数:5.5英寸:高:1920:宽1080. /** * 获得屏幕的宽度 * * @param c ...
- CSS中链接文本为图片时的问题(塌陷、对应的图片建立倒角的问题)
我在做Javascript DOM编程艺术的时候,在12章自己做练习时遇到了一个问题,<a>的内容<img>从<a>的盒子中溢出.代码如下: <a href= ...
- poj1284--原根的性质
关于原根,在百度百科上有着详细的介绍,此题主要考查原根的两个性质 1.只有奇素数才有原根. 2.一个数的原根个数为其欧拉函数的欧拉函数. 综合以上特点,可得到,我们设输入数为n,那么输出结果就为n-1 ...
- Sublime Text3 插件安装教程
链接地址:http://jingyan.baidu.com/article/4d58d541caeeaa9dd4e9c093.html
- 通过OCI 处理 Oracle 10g 中处理Clob大字段写入
Oracle数据库中, 通过存储过程写入Clob字段 , 当数据大于4k时, 报错 ORA-01460: 转换请求无法实施或不合理 经过排查, 数据Bind方式不对, 不能采用字符串的Bind方式 原 ...