makefile之cmake入门
2013-12-23 16:39
183 查看
cmake是一款生成makefile的软件;在生成makefile之前,首先是写一个CMakeLists.txt文件;
以下为典型例子:
先看目录tree, 在test文件夹中有:include目录, source目录, 以及main.c
source目录下有afile.c, bfile.c
include目录下有temp.h
afile.c中:
bfile.c中:
temp.h中:
main.c中:
在test目录下新建文件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_DEFINITIONS
向C/C++编译器添加-D定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG),参数之间用空格分割
ADD_DEFITIONS(-g)
AUX_SOURCE_DIRECTORY(dir VARIABLE)作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表
写完CMakeLists.txt之后;
cmake . 之后就可以发现生成了makefile;
make即可;
动态库构建
静态库构建
安装库和头文件
1.只需在CMakeLists.txt添加:
共享库(动态库)加入:
INSTALL(TARGETS main LIBRARY DESTINATION lib)
静态库则加入:
INSTALL(TARGETS main ARCHIVE DESTINATION lib)
2.头文件安装命令:
INSTALL(FILES include/tmp.h DESTINATION include/lib)
3.通过:
cmake -DCMAKE_INSTALL_PREFIX=/usr .
make
make install
可以将头文件和共享库安装到系统目录/usr/lib和/usr/include中
以下为典型例子:
先看目录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 0; }
在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指令的语法是:
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_DEFINITIONS
向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})
安装库和头文件
1.只需在CMakeLists.txt添加:
共享库(动态库)加入:
INSTALL(TARGETS main LIBRARY DESTINATION lib)
静态库则加入:
INSTALL(TARGETS main ARCHIVE DESTINATION lib)
2.头文件安装命令:
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 生成 Linux 下 Debug 版本的 Makefile 方法
- CMake 入门实战【转】
- CMake入门实践
- CMake入门教程
- Makefile 入门
- CMake 入门实战(转)
- CMake入门和使用(上)
- cmake 入门编程之编译一个静态库或者动态库
- gcc与makefile使用的常见问题和入门实例/GCC使用详解
- CMake 快速入门
- Cmake入门第一课
- 【原+转】用CMake代替makefile进行跨平台交叉编译
- 驱动入门——Makefile分析
- CMake入门指南
- CMake入门教程
- automake入门之使用automake生成hello.c的Makefile
- Makefile自动生成:cmake
- makefile和bash结合编译-执行(入门)