CMake 示例

1.需求ios

[1].使用第三方動/靜太庫ide

[2].自己代碼部分編譯爲動/靜態庫測試

[3]多項目管理ui

原文轉自:http://blog.csdn.net/shuyong1999/article/details/7108563
spa

2.構建一個單獨的項目.net

[1]目的:這個項目將生成可執行文件,動態和靜態庫。orm

 

先在workspace(or anywhere you like)下創建項目的目錄(文件)結構:blog

workspaceci

        |—— HelloWorld項目管理

                            |—— CMakeLists.txt

                            |—— include     Hello.h

                            |—— src             Hello.cpp, test.cpp, CMakeLists.txt

                            |—— build          (CMake外部構建時的使用的目錄, 可任意指定)

 [2]HelloWorld根目錄下的CMakeLists.txt

 

# 聲明CMake的最低要求版本  
cmake_minimum_required(VERSION 2.8)  
# 定義項目(工程)名稱,  
# 同時定義瞭如下默認變量:  
# PROJECT_SOURCE_DIR 或 HELLO_SOURCE_DIR, 代指CMake開始構建的根目錄(一般是項目根目錄)  
# PROJECT_BINARY_DIR 或 HELLO_BINARY_DIR, 代指CMake的編譯目錄(即執行cmake命令的目錄)  
PROJECT(HELLO)  
# 添加參與編譯的子目錄  
ADD_SUBDIRECTORY(src)  

 

 [3]Hello.h

#ifndef HELLO_H  
#define HELLO_H  
class Hello  
{  
public:  
    Hello(){}  
    void sayHello();  
};  
#endif  

 

  • #ifndef HELLO_H #define HELLO_H class public void #endif  

    [4]Hello.cpp

     

    #include <iostream>  
    #include "Hello.h"  
    void Hello::sayHello()  
    {  
         std::cout << "Hello CMake!" << std::endl;  
    }  
    

     

    [5]test.cpp
    #include "Hello.h"  
    int main(int arg, char** argv)  
    {  
        Hello h;  
        h.sayHello();  
    }  
    
    [6]src 下的CMakeLists.txt

     

    # 添加頭文件的查找目錄  
    INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)  
    ## 生成各類目標(target)文件: 可執行文件、動態庫、靜態庫  
    # 指定可執行文件的輸出目錄,輸出到bin下面  
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)  
    # 指定可執行文件名(hello)和相關源文件   
    ADD_EXECUTABLE(hello test.cpp Hello.cpp)  
    # 指定庫文件輸出路徑  
    SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)  
    # 生成動態庫  
    # 注意,前面已經使用target文件名hello,這裏不能再用。  
    ADD_LIBRARY(hello_so SHARED Hello.cpp)  
    # 設置庫輸出名爲 hello => libhello.so  
    SET_TARGET_PROPERTIES(hello_so PROPERTIES OUTPUT_NAME "hello")  
    # 生成靜態庫  
    # 注意,前面已經使用target文件名hello,這裏不能再用。  
    ADD_LIBRARY(hello_a STATIC Hello.cpp)  
    # 設置輸庫出名爲 hello => libhello.a  
    SET_TARGET_PROPERTIES(hello_a PROPERTIES OUTPUT_NAME "hello")  
    

    最後,進入build目錄執行命令: cmake <項目根目錄>

    若是執行cmake命令的目錄與項目根目錄相同,稱爲內部編譯,這時CMake生成的中間文件會與項目代碼混合,不推薦。

    不然,稱爲外部編譯,全部中間文件會生成在執行cmake命令的目錄下。

    cmake執行完後,會生成Makefile, 直接make, 會在項目下生成bin和lib目錄及目標文件。

    1. cmake ..  
    2. make  

     

    一般咱們不須要生成全部類型的目標文件,構建時根據須要選擇。

    3. 構建多個項目,使用外部項目提供的庫文件。

    在前面的HelloWorld項目中,生成了lib文件,就能夠經過頭文件和lib文件發佈給其餘項目了。

    咱們建立一個Test項目來使用HelloWorld的生成的庫,以下:

     

    workspace

           |—— HelloWorld

           |—— Test

                         |—— CMakeLists.txt

                         |—— src        main.cpp CMakeLists.txt

                         |—— build

    (1)Test目錄下的CMakeLists.txt

    1. cmake_minimum_required(VERSION 2.8)  
    2. ADD_SUBDIRECTORY(src)  

     

    2) main.cpp

    1. #include "Hello.h" intintchar }  

    (3) src下的CMakeLists.txt

    1. # 顯示系統的HOME環境變量的值 # 指定頭文件查找目錄 # 注意,這裏指定絕對路徑。 # 指定庫文件查找目錄(不能只指定頭文件,也須要鏈接到庫文件) # 注意,這裏指定絕對路徑, 也可經過設置系統環境變量LD_LIBRARY_PATH來指定。 # 生成可執行文件到項目的bin目錄 # 制定連接的外部Lib TARGET_LINK_LIBRARIES(main libhello.a)  

     

    最後,進入build目錄執行:

    1. cmake ..  
    2. make  

     

    到bin目錄下測試可執行文件:

    1. $ ./main   
    2. $ Hello CMake! 
相關文章
相關標籤/搜索