前面一节说了cmake简易使用,但是实际开发中项目文件非常多,使用哪种简易方式会导致代码十分混乱,因此本文介绍一种cmake管理大型项目的demo流程。

具体步骤如下:

1.创建相关的项目目录

  1. cmd
  2. mkdir hello
  3. cd hello
  4. mkdir inlude lib src debug

其中inlucde用来存放头文件,lib用来存放库文件,src用来存放源程序,debug用来作调试,类似于qt等IDE环境的配置

  1. cd src
  2. mkdir  main  util

其中main用来存放主程序(这里以main.cpp为例),util用来存放相关的库源程序(这里以hello.cpp为例)
2.创建相关的源文件 
在include中添加项目相关的头文件(这里以hello.h为例):

  1. hello.h
  2. #ifndef _HELLO_H_
  3. #define _HELLO_H_
  4. extern int hello();
  5. #endif

在main中添加主程序main.cpp如下:

  1. #include <iostream>
  2. #include "hello.h"
  3. int main(){
  4. hello();
  5. return 0;
  6. }

在util中添加hello.cpp如下:

  1. #include <iostream>
  2. using namespace std;
  3. int hello(){
  4. cout << "hello word cmake!!!" <<  endl;
  5. return 0;
  6. }

3.创建相关的配置文件CMakeLists.txt:
在顶级目录hello中添加CMakeLists.txt如下:

  1. <pre name="code" class="cpp">PROJECT(HELLO)#设置工程名
  2. ADD_SUBDIRECTORY(src)
  3. CMAKE_MINIMUM_REQUIRED(VERSION 3.7)#设置版本号
  4. MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
  5. MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})

这里定义了子目录src,用以递归的调用src中的CMakeLists.txt

src目录中添加CMakeLists.txt如下:

  1. ADD_SUBDIRECTORY(util)
  2. ADD_SUBDIRECTORY(main)
  3. 这里设置再次递归调用main与util中的CMakeLists.txt

main目录中添加CMakeLists.txt如下:

  1. SET(EXECUTABLE_OUTPUT_PATH ${HELLO_SOURCE_DIR}/bin)
  2. SET(SRC_LIST main.cpp)
  3. INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)
  4. LINK_DIRECTORIES(${HELLO_SOURCE_DIR}/lib)
  5. ADD_EXECUTABLE(hello ${SRC_LIST})
  6. TARGET_LINK_LIBRARIES(hello util)

这里的主要是是用来定义可执行程序编译和链接时所需要的一些命令或环境。
INCLUDE_DIRECTORIES命令是定义工程的include文件夹,其中存放使用到的库的头文件,LINK_DIRECTORIES是
定义工程的库文件,其中存放着库文件,ADD_EXECUTABLE是定义生成的可执行文件,TARGET_LINK_LIBRARIES用
以定义链接时需要的库文件。

util目录中添加CMakeLists.txt如下:

  1. SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)
  2. SET(CMAKE_C_COMPILER g++)
  3. SET(SRC_LIST hello.cpp)
  4. INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)
  5. 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中添加如下命令:

  1. INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake_demo)
  2. INSTALL(PROGRAMS run.bat DESTINATION  bin)
  3. INSTALL(PROGRAMS bin/hello.exe DESTINATION  bin)
  4. 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的更多相关文章

  1. Nginx + Tomcat Windows下的负载均衡配置

     Nginx + Tomcat Windows下的负载均衡配置 一.为什么需要对Tomcat服务器做负载均衡?    Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过50 ...

  2. Windows下pry安装和配置

    Windows下pry安装和配置 pry是一个增强型的交互式命令行工具,比irb强大. 有自动完成功能,自动缩进,有颜色.有更强大的调试功能. pry 安装很简单. 在终端输入: gem instal ...

  3. 【Objective-C】Windows下Objective-C开发环境配置

    [Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/   最近打 ...

  4. Windows下Apache+mod_python+Django配置

    Windows下Apache+mod_python+Django配置 Apache 首先要安装Apache,我安装的版本是2.2.*: Python python肯定是要安装的,我安装的版本是2.5的 ...

  5. Mysql在windows下的免安装配置步骤和重新安装的步骤

    windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...

  6. windows下spark开发环境配置

    http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...

  7. ACE在windows下的编译及配置(VS2010)

    ACE在windows下的编译及配置(VS2010) 分类:             -[小西南]-              2013-08-06 16:17     2354人阅读     评论( ...

  8. windows下apache+https环境配置

    windows下apache+https环境配置 转 https://www.cnblogs.com/sandaizi/p/7519370.html 1.修改配置文件conf/httpd.conf,去 ...

  9. windows下redis安装和配置

    windows下redis安装和配置 redis介绍 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数 ...

随机推荐

  1. 分享 KubeCon 2019 (上海)关于 Serverless 及 Knative 相关演讲会议

    有幸参加了 KubeCon 2019 上海大会,并参加了 Knative 及 Serverless 相关的几场分享会,收获满满.这里简单介绍一下各个演讲主题的主要内容.详细的演讲主题文档可以在Kube ...

  2. 微信小程序入门到实战(1)-基础知识

    1.微信小程序介绍 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. 1.1. 为什么是微信 ...

  3. JAVA高级特性--内部类

    内部类概念 public class Outer{ class inner{ } } 特点 可以很好的实现隐藏,可以使用procted,private 可以直接访问外部类的所有成员 ,包括私有成员. ...

  4. Ubuntu修改root密码,ssh 允许root用户登录

    1,切换为root用户 2,passwd root(or others) 3,输两次密码 4,重启. ssh允许root用户登录: 1,vim /etc/ssh/sshd_config 2,修改Per ...

  5. C++讲课总结 标签: c++总结 2015-02-28 14:48 671人阅读 评论(25) 收藏

    昨天老师算是给串了一本C++ 的课本,根据自己的理解,赶紧记录一下,也好作为自己学习时候的根据. C++编程简介:每本讲语言的书,第一章总是简介,内容无非是发展历史,语言特色等东西,专业的东西不多,都 ...

  6. SDUT-2119_数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 分别输入两个有序的整数序列(分别包 ...

  7. 60.0.1(64位)windows版 uploadify使用有问题

    http://mozilla.com.cn/thread-403024-1-1.html 60.0.1(64位)版,在使用uploadify插件,上传附件时,上传没有问题,可以成功,但执行上传成功后的 ...

  8. 5-2 正则表达式及其re模块

    一 正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 字符 量词 贪婪匹配 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配,<.*&g ...

  9. 当pip安装因为网络超时而无法安装的时候慢

    2.4 尝试pip --default-timeout=1000 install  https://download.pytorch.org/whl/cu100/torch-1.1.0-cp36-cp ...

  10. vb.net机房收费系统——存储过程

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xdd19910505/article/details/35574125 一.使用背景         ...