windows下使用cmake+mingw配置makefile
前面一节说了cmake简易使用,但是实际开发中项目文件非常多,使用哪种简易方式会导致代码十分混乱,因此本文介绍一种cmake管理大型项目的demo流程。
具体步骤如下:
1.创建相关的项目目录
- cmd
- mkdir hello
- cd hello
- mkdir inlude lib src debug
其中inlucde用来存放头文件,lib用来存放库文件,src用来存放源程序,debug用来作调试,类似于qt等IDE环境的配置
- cd src
- mkdir main util
其中main用来存放主程序(这里以main.cpp为例),util用来存放相关的库源程序(这里以hello.cpp为例)
2.创建相关的源文件
在include中添加项目相关的头文件(这里以hello.h为例):
- hello.h
- #ifndef _HELLO_H_
- #define _HELLO_H_
- extern int hello();
- #endif
在main中添加主程序main.cpp如下:
- #include <iostream>
- #include "hello.h"
- int main(){
- hello();
- return 0;
- }
在util中添加hello.cpp如下:
- #include <iostream>
- using namespace std;
- int hello(){
- cout << "hello word cmake!!!" << endl;
- return 0;
- }
3.创建相关的配置文件CMakeLists.txt:
在顶级目录hello中添加CMakeLists.txt如下:
- <pre name="code" class="cpp">PROJECT(HELLO)#设置工程名
- ADD_SUBDIRECTORY(src)
- CMAKE_MINIMUM_REQUIRED(VERSION 3.7)#设置版本号
- MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
- MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
这里定义了子目录src,用以递归的调用src中的CMakeLists.txt
src目录中添加CMakeLists.txt如下:
- ADD_SUBDIRECTORY(util)
- ADD_SUBDIRECTORY(main)
- 这里设置再次递归调用main与util中的CMakeLists.txt
main目录中添加CMakeLists.txt如下:
- SET(EXECUTABLE_OUTPUT_PATH ${HELLO_SOURCE_DIR}/bin)
- SET(SRC_LIST main.cpp)
- INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)
- LINK_DIRECTORIES(${HELLO_SOURCE_DIR}/lib)
- ADD_EXECUTABLE(hello ${SRC_LIST})
- TARGET_LINK_LIBRARIES(hello util)
这里的主要是是用来定义可执行程序编译和链接时所需要的一些命令或环境。
INCLUDE_DIRECTORIES命令是定义工程的include文件夹,其中存放使用到的库的头文件,LINK_DIRECTORIES是
定义工程的库文件,其中存放着库文件,ADD_EXECUTABLE是定义生成的可执行文件,TARGET_LINK_LIBRARIES用
以定义链接时需要的库文件。
util目录中添加CMakeLists.txt如下:
- SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)
- SET(CMAKE_C_COMPILER g++)
- SET(SRC_LIST hello.cpp)
- INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)
- ADD_LIBRARY(util STATIC ${SRC_LIST})
其中SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)定义了库生成的路径,LIBRARY_OUTPUT_PATH是一个内部变量,
存放库生成路径。SET(SRC_LIST hello.c)是用来定义库文件需要的源文件。ADD_LIBRARY(util STATIC ${SRC_LIST})是
用来定义生成的库的名字,以及生成库的类型和生成库需要的源文件。SET(CMAKE_C_COMPILER g++)是用来定义c的编译器
为g++,防止出现C和C++代码在不指定C编译器的情况下默认使用gcc,导致系统编译混乱
配置完成后目录结构如下:
4.编译运行
cd debug
cmake -G "MinGW Makefiles" ..\
make
..\bin\hello.exe
5.安装
在工程目录下添加COPYRIGHT、README、和run.bat,创建doc文件夹,在doc中新建hellot.txt
在顶级工程目录hello的CMakeLists.txt中添加如下命令:
- INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake_demo)
- INSTALL(PROGRAMS run.bat DESTINATION bin)
- INSTALL(PROGRAMS bin/hello.exe DESTINATION bin)
- INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake_demo
这些命令表示在执行make install命令时,安装程序会拷贝相应的文件、目录或程序到指定的前缀开始的目录中
重新构建cmake
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=c:\cmakedemo ..#指定前缀c:\cmakedemo构建
make install#安装工程
tree /F c:\cmakedemo#查看安装目录
http://blog.csdn.net/xiaopangzi313/article/details/53117923
http://blog.csdn.net/xiaopangzi313/article/details/53115702
windows下使用cmake+mingw配置makefile的更多相关文章
- Nginx + Tomcat Windows下的负载均衡配置
Nginx + Tomcat Windows下的负载均衡配置 一.为什么需要对Tomcat服务器做负载均衡? Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过50 ...
- Windows下pry安装和配置
Windows下pry安装和配置 pry是一个增强型的交互式命令行工具,比irb强大. 有自动完成功能,自动缩进,有颜色.有更强大的调试功能. pry 安装很简单. 在终端输入: gem instal ...
- 【Objective-C】Windows下Objective-C开发环境配置
[Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/ 最近打 ...
- Windows下Apache+mod_python+Django配置
Windows下Apache+mod_python+Django配置 Apache 首先要安装Apache,我安装的版本是2.2.*: Python python肯定是要安装的,我安装的版本是2.5的 ...
- Mysql在windows下的免安装配置步骤和重新安装的步骤
windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...
- windows下spark开发环境配置
http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...
- ACE在windows下的编译及配置(VS2010)
ACE在windows下的编译及配置(VS2010) 分类: -[小西南]- 2013-08-06 16:17 2354人阅读 评论( ...
- windows下apache+https环境配置
windows下apache+https环境配置 转 https://www.cnblogs.com/sandaizi/p/7519370.html 1.修改配置文件conf/httpd.conf,去 ...
- windows下redis安装和配置
windows下redis安装和配置 redis介绍 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数 ...
随机推荐
- Python学习之路12☞模块与包
一 模块 1.1 什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 1.2 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前 ...
- 百度语音识别REST API用法(含JAVA代码)——不须要集成SDK的方法
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/32329457 上一篇文章http://blog.c ...
- KiCad 安装后没有元件怎么办?
KiCad 安装后没有元件怎么办? 按以下步骤试试. 卸载 KiCad EDA. 按 Win+R 输入 %appdata%/kicad 进入 KiCad 的配置目录. 将里面的内容打包成一个 zip ...
- Hibernate错误——No row with the given identifier exists
错误 是用的是Hibernate自动建立的数据表,在进行数据库操作时,出现错误No row with the given identifier exists 解决 关系数据库一致性遭到了破坏,找到相关 ...
- Java帮助文档打开索引就停止服务
cmd: regsvr32 jscript.dllregsvr32 hhctrl.ocxregsvr32 itss.dllregsvr32 itircl.dll
- ORACLE学习笔记-ORACLE(基本命令)
--查看VGA信息: show sga; select * from v$sgastat;--可以通过以下几个动态性能视图查看信息: V$sysstat 系统统计信息 V ...
- 深入python
while循环知识: while是关键字 格式我们要怎么写:; while 条件 : 缩进 循环(代码块) 这里面有个死循环######条件如果一直为真,就形成了一个环,就成为了死循环 那我们如 ...
- git 生成秘钥连接远程仓库
二.打开GitBash ,用cd命令进入本地项目目,然后把初始化一下,把本地的目录变成git本地仓库, git status 可以查看本地目录的状态信息 git init git status 三.将 ...
- React与Vue的相同与不同点
我们知道JavaScript是世界上最流行的语言之一,React和Vue是JS最流行的两个框架.所以要想前端的开发那么必须掌握好这两个框架. 那么这两个框架有什么不同呢? React 和 Vue 相同 ...
- poj 3572 Hanoi Tower
Hanoi Towers Time Limit : 10000/5000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...