CMake 使用

一,先说说 makefile文件

         什么是makefile文件?一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile成为了一种在工程方面的编译方法。

 

二,CMake是干嘛的

           通过编写makefile文件然后使用make命令就能避免我们每次都编写那么大一段命令行命令,但是makefile使用起来有几个问题:

  • 在大型项目中要自己编写makefile文件还是很麻烦
  • makefile文件依赖于平台,简单描述下:win平台下使用微软自己的nmake工具以及cl编译器,假使我们在win下写好了makefile,想要将之移植到linux下(使用make与g++)又得重新再写一个makefile
  • 与2类似,现在不同的平台上有不同的IDE他们都使用自己的项目构建方案各自不兼容,每次重新编译我们肯定不会希望还得自己重新写makefile

于是乎为了解决上述问题,就有了cmake工具,cmake的出现基本解决了上面的问题,于是现在大部分的第三方库都是构建在cmake上的。

cmake的特点:

  • 跨平台,并可生成 本地编译配置文件,在 Linux/Unix 平台,生成 makefile,在 苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。
  • 简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
  • 可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。

三,cmake简单使用

(1),假设工程下有一个源文件  main.cpp

#include<iostream>
int main() 
{

    std::cout<<"Hello word!"<<std::endl;
    return 0;
}

(2),项目目录下 编写一个 CMakeLists.txt文件

PROJECT(main)
 
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
 
ADD_EXECUTABLE(main ${DIR_SRCS})

(3),利用 cmake工具编译

(4),windows下利用 vs 加载工程文件,编译即可

四,利用camke编译Qt工程

(1),查找Qt模块

Components后面加的就是这个工程中会用到的Qt模块,例如上面就用到了Core、Gui、Qml、Quick这几个模块

find_package(Qt5 COMPONENTS Core Gui Qml Quick REQUIRED)

(2),打开相关自动选项

Qt Quick程序中的QRC资源文件需要用rcc来进行预处理,生成相应.h.cpp文件。QObject派生的C++类也需要通过moc进行处理。这些都是编译系统中所谓的Rules。CMake中通过打开下面两个选项可以自动对这些后缀的文件进行相应处理:

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

(3),链接时设置相应模块

target_link_libraries(${PROJECT_NAME}  Qt5::Core Qt5::Gui Qt5::Qml Qt5::Quick)

 

(4),示例

if (NOT WIN32)
	return()
endif()

#相当于vs中的工程名称
project(obs-subtitle)

if(WIN32)
    #查找模块
	find_package(Qt5 COMPONENTS Core Gui Widgets  Multimedia WebSockets Network REQUIRED)
	
    set(CMAKE_AUTOMOC ON)
	set(CMAKE_INCLUDE_CURRENT_DIR ON)


	set(obs-subtitle_PLATFORM_SOURCES
		subtitle/obs-subtitle.cpp
		subtitle/obs-audio.cpp
		subtitle/obs-wss.cpp
		)

	set(obs-subtitle_PLATFORM_HEADERS
		subtitle/obs-audio.h
		subtitle/obs-wss.h
		)

	set(obs-subtitle_PLATFORM_DEPS
		gdiplus
		Qt5::Core
		Qt5::Gui
		Qt5::Multimedia
		Qt5::WebSockets
		Qt5::Widgets
		Qt5::Network
		)
endif()


add_library(obs-subtitle MODULE
	${obs-subtitle_PLATFORM_SOURCES}
	${obs-subtitle_PLATFORM_HEADERS})

#依赖库
target_link_libraries(obs-subtitle
	libobs
	${obs-subtitle_PLATFORM_DEPS})

install_obs_plugin_with_data(obs-subtitle data)

windows下是cl,Linux下是g++。Windows下的make程序是nmake.exe,Linux下是make

 

CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来描述项目的构建过程。在Ubuntu上使用CMake,通常需要先安装CMake,然后编写或获取相应的CMakeLists.txt文件来构建项目。下面是Ubuntu上使用CMake的基本步骤: 1. 安装CMake: 如果你还没有安装CMake,可以通过Ubuntu的包管理器apt来安装它。打开终端并执行以下命令: ```bash sudo apt update sudo apt install cmake ``` 2. 创建CMakeLists.txt文件: 你的项目目录中应该包含一个CMakeLists.txt文件,这个文件描述了如何编译和链接你的项目。一个基本的CMakeLists.txt可能看起来像这样: ```cmake cmake_minimum_required(VERSION 3.0) # CMake的最低版本要求 project(YourProjectName) # 项目名称 add_executable(your_target_name # 最终生成的可执行文件名称 your_source_file_1.cpp your_source_file_2.cpp # ... 其他源文件 ... ) ``` 3. 构建项目: 在终端中,进入包含CMakeLists.txt文件的目录,运行以下命令来创建构建目录并开始构建过程: ```bash mkdir build cd build cmake .. make ``` 上述命令会根据CMakeLists.txt生成Makefile,并使用make命令来编译项目。 4. 运行程序: 如果构建成功,你的可执行文件将在build目录中生成。你可以直接运行它: ```bash ./your_target_name ``` 5. 清理构建: 如果你需要清理构建过程中生成的文件,可以使用以下命令: ```bash make clean ``` 或者,如果你想完全删除构建目录并重新开始,可以: ```bash rm -rf build mkdir build cd build cmake .. make ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土拨鼠不是老鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值