CMake和CMakeLists.txt

8 篇文章 0 订阅
4 篇文章 0 订阅

qmake和cmake的区别?

  • qmake 是为 Qt 量身打造的,使用起来非常方便
  • cmake 不如qmake 简单易用,但功能更强大
  • out-of source 构建方式,Qt Creatorqmake也默认启用了该功能,称:shadow build

一般简单的项目使用qmake进行构建, 复杂的项目使用qmake编译。

/usr/local/bin和/usr/bin的区别?

/usr/bin 系统预装的一些可执行程序,随系统升级会改变
/usr/local/bin 用户安装的可执行程序,不受系统升级影响,用户编译安装软件时,一般放到/usr/local目录下

CMake

简介
比make更高级的编译配置工具,可以根据不同平台、编译器,生成相应的Makefile或者vcproj项目。

通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。

CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能。

网址

CMake下载网址:点我跳转CMake

使用步骤

  1. CMake主要编写CMakeLists.txt文件;
  2. 用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件;
  3. 最后用make命令编译源码生成可执行程序或共享库【so(shared object)】。

因此CMake的编译基本就两个步骤:cmakemake

编写CMakeLists.txt
#1.cmake verson,指定cmake版本 
cmake_minimum_required(VERSION 3.2)
#2.project name,指定项目的名称test,一般和项目的文件夹名称对应
PROJECT(test)
#3.head file path,头文件目录
INCLUDE_DIRECTORIES(include)
#4.source directory,把源文件目录src下的源代码文件加入变量DIR_SRCS
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#5.set environment variable,设置变量
SET(LIB_SRC ${DIR_SRCS})
#6.add executable file,添加要编译的可执行文件,为项目名test
#生成应用程序 test(在windows下会自动生成test.exe)
ADD_EXECUTABLE(${PROJECT_NAME} ${LIB_SRC})
#7.add link library,添加可执行文件所需要的库,比如我们用到了librealsense.so(命名规则:lib+name+.so),
#就添加该库的名称
TARGET_LINK_LIBRARIES(${PROJECT_NAME} realsense)

执行大概步骤:

cd test
mkdir build
cd build
cmake ..
make
./test

为了使用外部编译方式编译项目,需要先在和CMakeLists.txt同目录下新建一个目录build。

在linux命令行下,首先进入目录build,然后运行命令cmake .. (注:后面的..不可缺少)

该命令使cmake检测编译环境,并生成相应的makefile。

接着,运行命令make进行编译。编译后,生成的所有中间文件和可执行文件会在build目录下。

其实,cmake还可以直接在当前目录进行编译,无须建立build目录。但是,这种做法会将所有生成的中间文件和源代码混在一起,而且cmake生成的makefile无法跟踪所有的中间文件,即无法使用make distclean命令将所有的中间文件删除。

因此,我们推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可。这就是所谓的外部编译方式。

拓展
project(TestFaceDetect)#工程名字
cmake_minimum_required(VERSION 2.8)#CMAKE版本

#源码路径
#aux_source_directory(. SRC_LIST)
#源码文件(手工指定)
set(LIB_SRC person.cpp)
set(APP_SRC main.cpp)

#将person.cpp编译成静态库
add_library(libperson ${LIB_SRC})
#将person.cpp编译成动态库

#宏定义方法,任选一种
add_definitions("-DLIBPERSON_BUILD")
#set(CMAKE_C_FLAGS "") #c程序的
#set(CMAKE_CXX_FLAGS "-DLIBPERSON_BUILD") #c++程序的
add_library(libperson SHARED ${LIB_SRC})
#将main.cpp编译成exe
add_executable(${PROJECT_NAME} ${APP_SRC})
 
#exe链接时的依赖库
target_link_libraries(${PROJECT_NAME} libperson)

引入第三方库:

#引入第三方库
include_directories(${PROJECT_SOURCE_DIR}/fcsdk)
#首先要添加库,重要
add_library(libface  SHARED  IMPORTED)
 
#再设置库的位置
#引入dll库,特有的
set_target_properties(libface
    PROPERTIES
    IMPORTED_IMPLIB
    ${PROJECT_SOURCE_DIR}/fcsdk/FaceCapture.lib)

#set_property(TARGET
#    libface
#    PROPERTY
#    IMPORTED_IMPLIB
#    ${PROJECT_SOURCE_DIR}/fcsdk/FaceCapture.lib)
 
#引入第三方so库,任选一
#set_property(TARGET
#    libface
#    PROPERTY
#    IMPORTED_LOCATION
#    ${PROJECT_SOURCE_DIR}/fcsdk/FaceCapture.so)

#set_target_properties(libface
#    PROPERTIES
#    IMPORTED_LOCATION
#    ${PROJECT_SOURCE_DIR}/fcsdk/FaceCapture.so)

参考博客:https://blog.csdn.net/houwenbin1986/article/details/78475943

查看版本

cmake --version

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Antrn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值