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实战》,本文仅记录一下最基本的用法。
————————————————
版权声明:转载仅作为笔记使用。 本文为CSDN博主「Summit_Yue」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011197534/java/article/details/78385557