Linux下CMake简明教程(四)不同目录下多个源文件
代码在git
一般来说,当程序文件比较多时,我们会进行分类管理,把代码根据功能放在不同的目录下,这样方便查找。那么这种情况下如何编写CMakeLists.txt呢?
我们把之前的源文件整理一下(新建2个目录test_func和test_func1),整理好后整体文件结构如下
.
├── build
├── CMakeLists.txt
├── main.c
├── temp
│ └── CMakeLists1.txt
├── test_func
│ ├── testFunc.c
│ └── testFunc.h
└── test_func1├── testFunc1.c└── testFunc1.h
把之前的testFunc.c和testFunc.h放到test_func目录下,testFunc1.c和testFunc1.h则放到test_func1目录下。
其中,CMakeLists.txt和main.c在同一目录下,内容修改成如下所示,
cmake_minimum_required (VERSION 2.8)project (demo)include_directories (test_func test_func1)aux_source_directory (test_func SRC_LIST)
aux_source_directory (test_func1 SRC_LIST1)add_executable (main main.c ${SRC_LIST} ${SRC_LIST1})
mkdir build
cd build
cmake ..
make
./main
这种写法也可以
cmake_minimum_required (VERSION 2.8)project (demo)include_directories (test_func test_func1)aux_source_directory (test_func SRC_LIST)
aux_source_directory (test_func1 SRC_LIST)#add_executable (main main.c ${SRC_LIST} ${SRC_LIST1})
add_executable (main main.c ${SRC_LIST} )
这里出现了一个新的命令:include_directories。该命令是用来向工程添加多个指定头文件的搜索路径,路径之间用空格分隔。
因为main.c里include了testFunc.h和testFunc1.h,如果没有这个命令来指定头文件所在位置,就会无法编译。当然,也可以在main.c里使用include来指定路径,如下
#include "test_func/testFunc.h"
#include "test_func1/testFunc1.h"
#include “test_func/testFunc.h”
#include “test_func1/testFunc1.h”
Linux下CMake简明教程(四)不同目录下多个源文件相关推荐
- Linux下CMake简明教程(二)同一目录下多个源文件
代码在git 接下来进入稍微复杂的例子:在同一个目录下有多个源文件.在之前的目录下添加2个文件,testFunc.c和testFunc.h.添加完后整体文件结构如下, (base) ledi@ledi ...
- Linux下CMake简明教程(三)同一目录下多个源文件
如果在同一目录下有多个源文件,那么只要在add_executable里把所有源文件都添加进去就可以了.但是如果有一百个源文件,再这样做就有点坑了,无法体现cmake的优越性,cmake提供了一个命令可 ...
- Linux下CMake简明教程(七)对库进行链接
代码在git 既然我们已经生成了库,那么就进行链接测试下.重新建一个工程目录,然后把上节生成的库拷贝过来,然后在在工程目录下新建src目录和bin目录,在src目录下添加一个main.c,整体结构如下 ...
- Linux下CMake简明教程(10) 定义宏来控制打印的信息
代码在git 假设我们有个main.c,其内容如下 #include <stdio.h>int main(void) {#ifdef WWW1printf("hello worl ...
- Linux下CMake简明教程(九) 添加控制选项
代码在git 有时希望在编译代码时只编译一些指定的源码,可以使用cmake的option命令,主要遇到的情况分为2种: 本来要生成多个bin或库文件,现在只想生成部分指定的bin或库文件 对于同一个b ...
- Linux下CMake简明教程(八) 添加编译选项
代码在git 有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,就可以使用add_compile_options来进行操作. 这里以一个简单程序来做演示,main.cpp如下 # ...
- Linux下CMake简明教程(六)动态库和静态库的编译控制
代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...
- Linux下CMake简明教程(五)正规一点的组织结构
代码在git 正规一点来说,一般会把源文件放到src目录下,把头文件放入到include文件下,生成的对象文件放入到build目录下,最终输出的elf文件会放到bin目录下,这样整个结构更加清晰.让我 ...
- Linux下CMake简明教程(一)简单入门
代码链接 CMake是开源.跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件 ...
最新文章
- -bash:command not found
- Win32 SDK 编写截图小工具
- 两点补充——CSS3新属性以及弹性布局
- C# 客户端HTTP通信
- php react-native,React-Native+Mobx实现商城APP
- maze_travel的隐私声明
- LiteOS:剖析时间管理模块源代码
- Linux工作笔记032---Centos7.3 kill杀掉不用的进程_查看某个进程_某个进程占用的cpu,内存情况
- @SessionAttributes
- rust怎么造双层_DIY双层电路板 制作详解
- django:访问本地静态文件的配置
- 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方...
- 向下兼容性格什么意思_向下兼容是什么意思
- java留言板_java实现简单留言板功能的代码实例
- i9507 android8.1,三星I9507V官方原版固件rom系统刷机包下载
- 苹果6访问限制密码4位_1Password for Mac(专业密码管理工具)
- 文件压缩(哈夫曼树)
- 【IoT】创业:产品雷达图 - 如何明智地权衡产品?
- 解决HP ProLiant DL380 G5的安装与启动CentOS7时不能识别raid硬盘问题
- numpy之标准差std()
热门文章
- 【雷达书籍分享】RADAR SYSTEMS ANALYSIS AND DESIGN USING MATLAB
- 【基带传输】基于matlab的简易无线基带传输系统的仿真
- vue.js响应式原理解析与实现
- Android NDK开发之旅1 NDK介绍
- 【下载】RSA1024及RSA2048加密算法漏洞CVE-2017-7526 问题出在GnuPG加密库
- 使用sublime text2怎样新建文件高速生成HTML头部信息?
- CentOS7下用jdk1.7编译hadoop-2.7.1全过程详解
- angularjs directive 的几点使用技巧
- Normal Equations 的由来与推导
- PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树