转载自:https://blog.csdn.net/xiaopangzi313/article/details/53117923

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

具体步骤如下:

1.创建相关的项目目录

[cpp] view plaincopyprint?
  1. cmd
  2. mkdir hello
  3. cd hello
  4. mkdir inlude lib src debug
cmd
mkdir hello
cd hello
mkdir inlude lib src debug

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

[cpp] view plaincopyprint?
  1. cd src
  2. mkdir  main  util
cd src
mkdir  main  util 

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

[cpp] view plaincopyprint?
  1. hello.h
  2. #ifndef _HELLO_H_
  3. #define _HELLO_H_
  4. extern int hello();
  5. #endif
hello.h
**#ifndef _HELLO_H_**
**#define _HELLO_H_**
extern int hello();**#endif

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

[cpp] view plain** copyprint?
  1. #include <iostream>
  2. #include “hello.h”
  3. int main(){
  4. hello();
  5. return 0;
  6. }
#include <iostream>
**#include "hello.h"**int main(){hello();return 0;
}

在util中添加hello.cpp如下:

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

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

[cpp] view plaincopyprint?
  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})&nbsp;&nbsp;</span></span></li><li class=""><span>MESSAGE(STATUS&nbsp;<span class="string">"This&nbsp;is&nbsp;SOURCE&nbsp;dir&nbsp;"</span><span>&nbsp;{HELLO_BINARY_DIR})&nbsp;&nbsp;</span></span></li><li class=""><span>MESSAGE(STATUS&nbsp;<span class="string">"This&nbsp;is&nbsp;SOURCE&nbsp;dir&nbsp;"</span><span>&nbsp;{HELLO_BINARY_DIR})
  5. MESSAGE(STATUS "This is SOURCE dir " {HELLO_SOURCE_DIR})
<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如下:

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

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

[cpp] view plaincopyprint?
  1. SET(EXECUTABLE_OUTPUT_PATH {HELLO_SOURCE_DIR}/bin)&nbsp;&nbsp;</span></span></li><li class=""><span>SET(SRC_LIST&nbsp;main.cpp)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>INCLUDE_DIRECTORIES({HELLO_SOURCE_DIR}/bin)&nbsp;&nbsp;</span></span></li><li class=""><span>SET(SRC_LIST&nbsp;main.cpp)&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>INCLUDE_DIRECTORIES({HELLO_SOURCE_DIR}/bin)
  2. SET(SRC_LIST main.cpp)
  3. INCLUDE_DIRECTORIES({HELLO_SOURCE_DIR}/include)
  4. LINK_DIRECTORIES({HELLO_SOURCE_DIR}/lib)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>ADD_EXECUTABLE(hello&nbsp;{HELLO_SOURCE_DIR}/lib)&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>ADD_EXECUTABLE(hello&nbsp;{HELLO_SOURCE_DIR}/lib)
  5. ADD_EXECUTABLE(hello {SRC_LIST})
  6. TARGET_LINK_LIBRARIES(hello util)
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如下:

[cpp] view plaincopyprint?
  1. SET(LIBRARY_OUTPUT_PATH {HELLO_SOURCE_DIR}/lib)&nbsp;&nbsp;</span></span></li><li class=""><span>SET(CMAKE_C_COMPILER&nbsp;g++)&nbsp;&nbsp;</span></li><li class="alt"><span>SET(SRC_LIST&nbsp;hello.cpp)&nbsp;&nbsp;</span></li><li class=""><span>INCLUDE_DIRECTORIES({HELLO_SOURCE_DIR}/lib)&nbsp;&nbsp;</span></span></li><li class=""><span>SET(CMAKE_C_COMPILER&nbsp;g++)&nbsp;&nbsp;</span></li><li class="alt"><span>SET(SRC_LIST&nbsp;hello.cpp)&nbsp;&nbsp;</span></li><li class=""><span>INCLUDE_DIRECTORIES({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})&nbsp;&nbsp;</span></li></ol></div><pre class="cpp" name="code" style="display: none;">SET(LIBRARY_OUTPUT_PATH{SRC_LIST})&nbsp;&nbsp;</span></li></ol></div><pre class="cpp" name="code" style="display: none;">SET(LIBRARY_OUTPUT_PATH{SRC_LIST})
SET(LIBRARY_OUTPUT_PATH {HELLO_SOURCE_DIR}/lib) SET(CMAKE_C_COMPILER g++) SET(SRC_LIST hello.cpp) INCLUDE_DIRECTORIES(HELLOSOURCEDIR/include)ADDLIBRARY(utilSTATICHELLOSOURCEDIR/include)ADDLIBRARY(utilSTATIC{HELLO_SOURCE_DIR}/include)
ADD_LIBRARY(util STATIC {SRC_LIST})</pre>其中SET(LIBRARY_OUTPUT_PATH HELLOSOURCEDIR/lib)定义了库生成的路径,LIBRARYOUTPUTPATH是一个内部变量,存放库生成路径。SET(SRCLISThello.c)是用来定义库文件需要的源文件。ADDLIBRARY(utilSTATICHELLOSOURCEDIR/lib)定义了库生成的路径,LIBRARYOUTPUTPATH是一个内部变量,存放库生成路径。SET(SRCLISThello.c)是用来定义库文件需要的源文件。ADDLIBRARY(utilSTATIC{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中添加如下命令: 
[cpp] view plaincopyprint?
  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
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#查看安装目录

windows下使用cmake+mingw配置makefile(2)相关推荐

  1. windows下使用cmake+mingw配置makefile(1)

    转载自:https://blog.csdn.net/xiaopangzi313/article/details/53115702 1.下载Cmake,并配置环境变量 下载链接:https://cmak ...

  2. 在Windows下使用CMake+MinGW搭建C/C++编译环境

    转载自:https://blog.csdn.net/isscollege/article/details/78038921?locationNum=8&fps=1 1 工具介绍 作为一款执行效 ...

  3. Windows下用CMake编译JsonCpp及配置(适合新手)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 JsonCpp是什么? JSON是一种轻量级的数据交换格式.它可以表示数字.字符串.有序的值序列 ...

  4. 脱离AS在windows下使用CMake交叉编译for Android

    脱离AS在windows下使用CMake交叉编译for Android 前言 可能有Android开发经验并搞过jni的撸友知道,使用Android ndk 中的ndk-build 结合Android ...

  5. windows下安装cygwin及配置

    windows下安装cygwin及配置 对于使用Windows操作系统作为开发平台同时又喜欢类unix环境的朋友(Windows不是最方便的开发环境),这里是在Cygwin环境下安装Rails的步骤 ...

  6. windows下spark开发环境配置

    --本篇随笔由同事葛同学提供. windows下spark开发环境配置 特注:windows下开发spark不需要在本地安装hadoop,但是需要winutils.exe.hadoop.dll等文件, ...

  7. 学习笔记:Windows 下Keras安装和配置指南

    目录: 目录: Windows下Keras安装和配置指南 Keras 框架搭建 安装 本系列参考官方文档官方文档 这就是keras可以参考前篇:这就是keras 学习笔记 Keras:一些基本概念 一 ...

  8. Windows 下 Anaconda3 的安装配置

    Windows 下 Anaconda3 的安装配置 我的小站.Github Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 目录 ...

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

    一.为什么需要对Tomcat服务器做负载均衡?     Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过500的并发数会出现Tomcat不能响应新的请求的情况,严重影响网 ...

最新文章

  1. ES6与canvas实现鼠标小球跟随效果
  2. EMC_AutoStart5.4安装配置之五
  3. SQL注入-二阶注入(十)
  4. word List37
  5. (回溯 UVa129)困难的串
  6. Judy alpha 第七天
  7. java编程思想2_《JAVA编程思想2》笔记
  8. html中图片显示、隐藏
  9. Gb28181-2016 相关标准文档参考
  10. Lua语言学习-错误处理和调试
  11. PKU 1273 Drainage Ditches
  12. paip.提升用户体验-----c++ gcc 命令在notepad++扩展中的配置..
  13. HDU-6437 Problem L.Videos(最大费用最大流拆点)
  14. 单片机加减法C语言,如何利用51单片机实现加减法计算
  15. Eclipse显示单词拼写错误The word ‘url‘ is not correctly spelled
  16. MySQL数据库的主主同步配置
  17. 华为手机如何给手机屏幕录制
  18. Aspose.Slides使用教程:使用 C++ 访问或修改 PowerPoint 文件的属性
  19. Vision.CascadeObjectDetector-VJ算法学习
  20. -XX:CMSInitiatingOccupancyFraction和-XX:+UseCMSInitiatingOccupancyOnly参数

热门文章

  1. 容器编排技术 -- Kubernetes kubectl get 命令详解
  2. MinIO Docker 快速入门 ​​​​​​​
  3. 数据库面试 - 如何设计才可以让系统从未分库分表动态切换到分库分表上?
  4. BGP——Route-map扩展(讲解+配置)@
  5. KNN-K最近邻算法+实例应用
  6. C#LeetCode刷题-剑指Offer
  7. webview中js调用客户端
  8. bec初级第一课_在您的第一个初级开发人员工作中如何生存和发展
  9. php to golang,PHP To Go 转型手记 (二)
  10. 采样率,码率,帧率,I 帧,P 帧,B帧,RTP时间戳