windows下使用cmake+mingw配置makefile

來源:互聯網
上載者:User

標籤:this   compiler   遞迴   deb   types   sni   view   運行   bsp   

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

具體步驟如下:

1.建立相關的項目目錄

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

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

[cpp] view plain copy  
  1. cd src  
  2. mkdir  main  util   

其中main用來存放主程式(這裡以main.cpp為例),util用來存放相關的庫來源程式(這裡以hello.cpp為例)
2.建立相關的源檔案 
在include中添加項目相關的標頭檔(這裡以hello.h為例):

[cpp] view plain copy  
  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  
  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  
  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  
  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  
  1. ADD_SUBDIRECTORY(util)  
  2. ADD_SUBDIRECTORY(main)  
  3. 這裡設定再次遞迴調用main與util中的CMakeLists.txt  

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

[cpp] view plain copy  
  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  
  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  
  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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.