cmake基本用法

cmake基本用法

我們編寫一個C++單例類,使用cmake構建項目,主要是爲了記錄一下cmake的基本用法。
首先項目文件夾爲DemoProject,我們創建一個main.cpp作爲我們的主文件,創建一個子文件夾Singleton,在Singleton中創建Singleton.h和Singleton.cpp作爲我們的單例類。代碼如下,很簡單,就是獲取一個單例然後調用它的函數:

main.cpp

#include <iostream>
#include <Singleton.h>

int main() {
  Singleton::getInstance()->print();
}

接下來Singleton類的實現如下:

Singleton.h

//
// Created by yue on 17-10-24.
//

#ifndef DEMOPROJECT_GETSINGLETON_H
#define DEMOPROJECT_GETSINGLETON_H

#include<iostream>

class Singleton {
public:
    static Singleton* getInstance();
    void print();
private:
    Singleton(){}
};


#endif //DEMOPROJECT_GETSINGLETON_H

Singleton.cpp

//
// Created by yue on 17-10-24.
//

#include "Singleton.h"

Singleton* Singleton::getInstance() {
  static Singleton instance;
  return &instance;
}

void Singleton::print() {
  std::cout<<"success"<<std::endl;
}

接下來開始編譯這個類,首先在Singleton文件夾下創建build存放編譯後得到的靜態庫與動態庫,然後編寫CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.0)    #最低需要的cmake版本
project(Singleton)                     #工程名稱

set(CMAKE_CXX_STANDARD 11)             #C++11標準

set(SOURCE_FILES Singleton.cpp)        #設置變量SOURCE_FILES值爲源文件名
set(CMAKE_CXX_FLAGS "-std=c++11")      #編譯選項,實例中用到nullptr,故需要加--std=c++11

add_library(Singleton SHARED ${SOURCE_FILES})         #生成動態庫
add_library(Singleton_static STATIC ${SOURCE_FILES})  #生成靜態庫
set_target_properties(Singleton_static PROPERTIES OUTPUT_NAME "Singleton") #設置輸出靜態庫名稱

然後在build中執行cmake..和make得到動態庫和靜態庫。
最後編譯工程,在DemoProject中創建CMakeLists.txt,內容如下:

cmake_minimum_required(VERSION 3.0)
project(DemoProject)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
set(CMAKE_CXX_FLAGS "-llog4cplus -lpthread -pthread -std=c++11")  
#向工程添加多個特定的頭文件搜索路徑
include_directories(/home/yue/桌面/Tianyan/DemoProject/log4cplus/build/include
                    /home/yue/桌面/Tianyan/DemoProject/boost/boost_1_65_1/build/include
                    /home/yue/桌面/Tianyan/DemoProject/Singleton)
#添加共享庫路徑
link_directories(/home/yue/桌面/Tianyan/DemoProject/log4cplus/build/lib
                 /home/yue/桌面/Tianyan/DemoProject/boost/boost_1_65_1/build/lib
                 /home/yue/桌面/Tianyan/DemoProject/Singleton/build)
#生成可執行文件
add_executable(DemoProject ${SOURCE_FILES})
#爲DemoProject添加需要鏈接的共享庫
target_link_libraries(DemoProject log4cplus boost_system boost_thread libSingleton.so)

同樣創建build,進入build執行cmake..和make,至此編譯結束。

更復雜的cmake用法參加《cmake實戰》,本文僅記錄一下最基本的用法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章