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

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

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

具体步骤如下:

1.创建相关的项目目录

  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环境的配置
  1. cd src  
  2. mkdir  main  util   
cd src
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.   
  6. #endif  
hello.h
**#ifndef _HELLO_H_**
**#define _HELLO_H_**
extern int hello();

**#endif
在main中添加主程序main.cpp如下:
[cpp] view plain ** copy
print ?
  1. #include <iostream>  
  2. #include “hello.h”  
  3.   
  4.   
  5. int main(){  
  6.     hello();  
  7.       
  8.     return 0;  
  9. }  
#include <iostream>
**#include "hello.h"**


int main(){
    hello();

    return 0;
}
在util中添加hello.cpp如下:
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4.   
  5. int hello(){  
  6.     cout << ”hello word cmake!!!” <<  endl;  
  7.       
  8.     return 0;  
  9. }  
#include <iostream>
using namespace std;


int hello(){
    cout << "hello word cmake!!!" <<  endl;

    return 0;
}
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.   
  5. 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_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如下:

  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如下:
  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}/include)  
  2. 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; {SRC_LIST})  
  3. 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如下:
  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}/include)  
  2. 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 {HELLO_SOURCE_DIR}/lib) SET(CMAKE_C_COMPILER g++) SET(SRC_LIST hello.cpp) INCLUDE_DIRECTORIES( HELLOSOURCEDIR/include)ADDLIBRARY(utilSTATIC H E L L O S O U R C E D I R / i n c l u d e ) A D D L I B R A R Y ( u t i l S T A T I C {SRC_LIST})</pre>其中SET(LIBRARY_OUTPUT_PATH HELLOSOURCEDIR/lib)LIBRARYOUTPUTPATHSET(SRCLISThello.c)ADDLIBRARY(utilSTATIC H E L L O S O U R C E D I R / l i b ) 定 义 了 库 生 成 的 路 径 , L I B R A R Y O U T P U T P A T H 是 一 个 内 部 变 量 , 存 放 库 生 成 路 径 。 S E T ( S R C L I S T h e l l o . c ) 是 用 来 定 义 库 文 件 需 要 的 源 文 件 。 A D D L I B R A R Y ( u t i l S T A T I C {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   
    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#查看安装目录




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值