美文网首页
Cmake要点

Cmake要点

作者: Domibaba | 来源:发表于2020-03-01 05:51 被阅读0次

Cmake要点

  • -G用来指定构建平台,例如-G"Unix Makefiles"、-G"Visual Studio 2019"等,请注意,一旦使用之后,会在CMakeCache.txt文件记录下来,除非删除该文件,否则会沿用之前指定的构建平台
  • --build命令用来将调用与构建平台相关的构建命令,例如cmake --build .在linux平台相当于执行
cmake .
make

还可以在此参数后使用--target指定make的参数,cmake --build . --target all即相当于:

cmake .
make all
  • 一个最基本的CMakeFiles.txt结构
cmake_minimum_required(VERSION 3.10)
project(ProjectName)
add_excutable(targetname source.cpp)
  • 添加程序的版本号,这样可以在cmake中指定,而不用修改源代码。

使用configure_file命令,并且要把可执行文件生成目录加进来,因为生成的头文件就在该目录下。

set(Project_VERSION_MAJOR 0)
set(Project_VERSION_MINOR 1)
configure_file(project_config.h.in project_config.h)
include_directories("${PROJECT_BINARY_DIR}")

需要新建一个project_config.h.in的文件,并在文件内添加如下两行:

// the configured options and settings for Tutorial
#define Project_VERSION_MAJOR @Project_VERSION_MAJOR@
#define Project_VERSION_MINOR @Project_VERSION_MINOR@
  • 指定C++标准,示例为指定C++ 11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
  • 增加库
    在当前构建目录新建一个目录mymath来用于存在我们提供的库文件源代码,在mymath下新建mysqrt.h、mysqrt.cpp、CMakeLists.txt三个文件,内容分别如下
# mymath/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
add_library(mymath mysqrt.cpp)

// mymath/mysqrt.h
double mysqrt(double x);

// mymath/mysqrt.cpp
#include <cmath>
#include <iostream>
#include "mysqrt.h"
double mysqrt(double x) {
    std::cout << "use my sqrt..." << std::endl;
    return std::sqrt(x);
}

上层目录的CMakeLists.txt的文件需要增加如下内容,一是包含mymath的目录,二是将生成的mymath库链接到最后的可执行文件;可以通过一个开关来打开或者关闭,也可在cmake命令中加入-D参数来传入开关选项(宏定义)

通过option传递开关:

option(USE_MYMATH "Use mymath replace standard libs..." ON)
if(USE_MYMATH)
    add_subdirectory(mymath)
    list(APPEND EXTRA_LIBS mymath)
    list(APPEND EXTRA_INCLUDES "$(PROJECT_SOURCE_DIR)/mymath")
endif()
target_link_libraries(targetname ${EXTRA_LIBS})

通过cmake命令传入:

#打开
cmake . -DUSE_MYMATH=ON
#关闭
cmake . -DUSE_MYMATH=OFF
  • 几个对库/可执行文件使用的命令(以target_开头)
  1. target_include_directories

target_include_directories()
当编译目标文件时候,增加所需要的头文件目录,用法如下
target_include_directories(<target> [SYSTEM] [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
需要注意的时,命令中的第一个参数target必须是已经使用add_library()或者add_executable()命令指定的target,并且不能是一个别名target.
使用这个命令来改造mymah目录下的CMakeLists.txt,这样就不用在上一级的目录指定包含mymath的目录也能找到该目录下的头文件,这样的好处是只要在上级目录用add_subdirectories()添加对该目录的CMakeLists.txt的处理之后,不需要添加每个需要使用文件夹,以便能找到头文件。

#mymath/CMakeLists.txt

#在最后一行加入
target_include_directories(mymath INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
  1. target_compile_definitions

target_compile_definitions()
编译目标文件时,添加一些预处处理编译选项,例如对宏的定义。
target_compile_definitions(target PUBLIC -DMYMATH)

  1. target_compile_options

target_compile_options
编译目标文件时,增加编译选项,这个命令可以增加任何选项,使用范围很广,但是增加目录或者预处理选项还是推荐target_include_directories()和target_compile_definitions()。

  1. target_link_libraries

target_link_libraries()
当需要链接到目标文件或者依赖文件时,指定库或标记。

  • install命令,当执行make install的时候,会将CMakeLists.txt中的install内容部署到系统相应的位置
install(TARGETS target DESTINATION bin)
install(TARGETS target_lib DESTINATION lib)
install(FILES headers DESTINATION include)
  • 运行测试(待补充)

相关文章

  • Cmake要点

    Cmake要点 -G用来指定构建平台,例如-G"Unix Makefiles"、-G"Visual Studio ...

  • 9.Ubuntu安装cmake

    一、安装cmake 在cmake官网下载cmake:https://cmake.org/download/ 我没有...

  • CMake学习

    目录 什么是CMake? linux平台安装CMake CMake的helloworld 1. 什么是CMake?...

  • LNMP安装教程:安装mysql

    安装Mysql前需要安装cmake 1.安装cmake 下载cmake wget http://www.cmake...

  • CMake - 让人头痛的止痛药

    CMake 编译 CMake Manual CMake Tutorial User Interaction Gui...

  • 编译:CMAKE

    CMAKE 0、CMake CMake中,我们先输入cmake 命令对工程进行分析,生成makefile文件; 然...

  • CMake & make & Library

    CMake[https://cmake.org/documentation/] CMAKE_DL_LIBS[htt...

  • linux opencv4.2

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX...

  • mac下opencv编译使用

    1、安装cmake brew install cmake brew link cmake 2、下载 https:/...

  • cmake下载

    cmake下载 https://cmake.org/files/[https://cmake.org/files/]

网友评论

      本文标题:Cmake要点

      本文链接:https://www.haomeiwen.com/subject/fkczhhtx.html