1. 将单个源文件构建为可执行文件
1.1 准备工作
假设有以下源代码,希望使用cMake将其构建为一个可执行文件,示例源码如下
#include <cstdlib>
#include <iostream>
#include <string>
std::string say_hello() { return std::string("Hello, CMake world!"); }
int main() {
std::cout << say_hello() << std::endl;
return EXIT_SUCCESS;
}
1.2 具体实施
编写cMake指令存放文件,命名为CMakeLists.txt,注意名字必须为CMakeLists.txt才可以被cMake工具识别,编写如下cMake指令
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(recipe-01 LANGUAGES CXX)
add_executable(hello-world hello-world.cpp)
编写完上述内容之后开始构建,cmake的构建分为源内构建和源外构建,为了不污染工程文件使用源外构建,在源文件目录下执行如下指令构建
mkdir -p build
cd build
cmake ..
make
cmake的标准语法使用-H
指定CMakeLists.txt,使用-b
指定build目录.
2. 将文件编译为库文件并链接至目标文件
2.1 编写库源文件按
编写一个xprint
函数,代替之前的打印,并将该xprint
函数编译为库,链接至目标文件,代码如下
#include <iostrem>
void xprint(const string& message){
std::cout<<"[out]"<<message<<endl;
}
#pragma once
void xprint(const string&& message);
2.2 修改CMakeLists.txt文件
将上述源文件编译为库,修改CMakeLists.txt需要增加如下项
# 添加库文件,第一个参数为库文件名字,第二个参数说明构建库的类型,第三个参数添加构建该库文件所需要的依赖
add_library(message
STATIC
Message.hpp
Message.cpp
)
# 将库链接到目标文件中去,第一个参数是目标文件,第二个参数是依赖库文件的名字
target_link_libraries(hello-world message)
2.3 关于add_library第二个参数的取值
STATIC 用于创建静态库
SHARED 用于创建动态库
OBJECT 可以将add_library中的源文件编译到目标文件而不是编译成库之后链接
MODULE 主要用来构建运行时插件
3 归纳总结
- cMake构建分为源内构建与源外构建,一般使用源外构建,也就是创建build目录构建
- cMake语法是非大小写敏感型,但是cMake参数区分大小写,一般参数推荐使用全大写
- cMake工具寻找的顶层CMakeLists.txt名字必须写成CMakeLists.txt,如果有大小写错误,工具将识别不到
- cMake中默认的编程语言是C++语言,使用LANGUAGE可以修改默认项目的默认语言
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)