標籤:this compiler 遞迴 deb types sni view 運行 bsp
前面一節說了cmake簡易使用,但是實際開發中專案檔非常多,使用哪種簡易方式會導致代碼十分混亂,因此本文介紹一種cmake管理大型項目的demo流程。
具體步驟如下:
1.建立相關的項目目錄
[cpp] view plain copy
- cmd
- mkdir hello
- cd hello
- mkdir inlude lib src debug
其中inlucde用來存放標頭檔,lib用來存放庫檔案,src用來存放來源程式,debug用來作調試,類似於qt等IDE環境的配置
[cpp] view plain copy
- cd src
- mkdir main util
其中main用來存放主程式(這裡以main.cpp為例),util用來存放相關的庫來源程式(這裡以hello.cpp為例)
2.建立相關的源檔案
在include中添加項目相關的標頭檔(這裡以hello.h為例):
[cpp] view plain copy
- hello.h
- #ifndef _HELLO_H_
- #define _HELLO_H_
- extern int hello();
-
- #endif
在main中添加主程式main.cpp如下:
[cpp] view plain copy
- #include <iostream>
- #include "hello.h"
-
-
- int main(){
- hello();
-
- return 0;
- }
在util中添加hello.cpp如下:
[cpp] view plain copy
- #include <iostream>
- using namespace std;
-
-
- int hello(){
- cout << "hello word cmake!!!" << endl;
-
- return 0;
- }
3.建立相關的設定檔CMakeLists.txt:
在頂級目錄hello中添加CMakeLists.txt如下:
[cpp] view plain copy
- <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 plain copy
- ADD_SUBDIRECTORY(util)
- ADD_SUBDIRECTORY(main)
- 這裡設定再次遞迴調用main與util中的CMakeLists.txt
main目錄中添加CMakeLists.txt如下:
[cpp] view plain copy
- 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 plain copy
- SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)
- SET(CMAKE_C_COMPILER g++)
- SET(SRC_LIST hello.cpp)
- INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)
- 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
- 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#查看安裝目錄
http://blog.csdn.net/xiaopangzi313/article/details/53117923
http://blog.csdn.net/xiaopangzi313/article/details/53115702
windows下使用cmake+mingw配置makefile