windows下使用cmake+mingw配置makefile


前面一節說了cmake簡易使用,但是實際開發中項目文件非常多,使用哪種簡易方式會導致代碼十分混亂,因此本文介紹一種cmake管理大型項目的demo流程。

具體步驟如下:

1.創建相關的項目目錄

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. cmd   
  2. mkdir hello  
  3. cd hello  
  4. mkdir inlude lib src debug  

其中inlucde用來存放頭文件,lib用來存放庫文件,src用來存放源程序,debug用來作調試,類似於qt等IDE環境的配置

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. cd src  
  2. mkdir  main  util   

其中main用來存放主程序(這里以main.cpp為例),util用來存放相關的庫源程序(這里以hello.cpp為例)
2.創建相關的源文件 
在include中添加項目相關的頭文件(這里以hello.h為例):

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. hello.h  
  2. #ifndef _HELLO_H_  
  3. #define _HELLO_H_  
  4. extern int hello();  
  5.   
  6. #endif  

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

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. #include <iostream>  
  2. #include "hello.h"  
  3.   
  4.   
  5. int main(){  
  6.     hello();  
  7.       
  8.     return 0;  
  9. }  

在util中添加hello.cpp如下:

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4.   
  5. int hello(){  
  6.     cout << "hello word cmake!!!" <<  endl;  
  7.       
  8.     return 0;  
  9. }  

3.創建相關的配置文件CMakeLists.txt:
在頂級目錄hello中添加CMakeLists.txt如下:

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  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})  
  6. MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})  

 

 
        

這里定義了子目錄src,用以遞歸的調用src中的CMakeLists.txt

 

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

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. ADD_SUBDIRECTORY(util)  
  2. ADD_SUBDIRECTORY(main)  
  3. 這里設置再次遞歸調用main與util中的CMakeLists.txt  

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

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. SET(EXECUTABLE_OUTPUT_PATH ${HELLO_SOURCE_DIR}/bin)  
  2. SET(SRC_LIST main.cpp)  
  3.   
  4. INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)  
  5. LINK_DIRECTORIES(${HELLO_SOURCE_DIR}/lib)  
  6.   
  7. ADD_EXECUTABLE(hello ${SRC_LIST})  
  8. TARGET_LINK_LIBRARIES(hello util)  

  這里的主要是是用來定義可執行程序編譯和鏈接時所需要的一些命令或環境。
INCLUDE_DIRECTORIES命令是定義工程的include文件夾,其中存放使用到的庫的頭文件,LINK_DIRECTORIES是
定義工程的庫文件,其中存放着庫文件,ADD_EXECUTABLE是定義生成的可執行文件,TARGET_LINK_LIBRARIES用
以定義鏈接時需要的庫文件。

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

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  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中添加如下命令:

 

[cpp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM