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實戰》,本文僅記錄一下最基本的用法。