【Linux】cmake

一、cmake简介:

普通的文件管理方式
在这里插入图片描述

cmake的管理方式:
在这里插入图片描述

cmake优点:cmake可以跨平台对项目进行管理,如需增加/减少源文件,对于不同的平台,只需要修改CMakeLists.txt文件内容即可。

二、cmake的基本语法

  1. 基本语法格式:指令(参数一 参数二)
    -参数使用括弧括起来;
    -参数之间使用空格或者分号隔开;
  2. 指令大小写无关,参数和变量是大小写有关的
set(HELLO main.cpp)
add_executable(hello main.cpp hello.cpp)
ADD_EXECUTABLE(hello main.cpp ${
    
    HELLO})
变量使用${
    
    变量名}方式进行取值,但是在if语句中是直接使用变量名;

三、重要的指令和常用变量

  • cmake_minimum_required指定Cmake的最小版本要求
    语法:cmake_minimum_required(VERSION version number[FATAL_ERROR])
#cmake最小版本要求2.8.3
cmake_minimum_required(VERSION 2.8.3)
  • project 定义工程名称,并指定工程支持的语言
    语法:project(projectname [cxx][c][Java])
#指定项目名字为HELLOWORLD
project(HELLOWORLD)
  • set 显式定义变量
    语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
#定义SRC变量
set(SRC hello.cpp main.cpp)
  • include_directories 向工程添加多个特定的头文件搜索路径
    相当于指定g++编译器的-l参数
    语法:include_directories(AFTER [BEFORE] [SYSTEM] dir1 dir2 ...)
#将/usr/include/myincludefolder 和 ./include添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)
  • link_directories 向工程内添加多个特定的库文件搜索路径
    相当于指定g++编译器的-L参数
    语法:link_directories(dir1 dir2)
#将/usr/lib/mylibfolder和./lib添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib);
  • add_library 生成库文件
    语法:add_library(libname [SHARED|STATIC|MUDULE] [EXCLUDE_FROM_ALL] source1 source2 ...)
#通过变量SRC生成libhello.so共享库
add_library(hello SHARED ${
    
    SRC})
  • add_compile_options 添加编译参数
    语法:add_compile_optins(<options> ...)
#添加编译参数 -Wall -std=c++11
add_compile_optins(-Wall -std=c++11 -o2)
  • add_executable生成可执行文件
    语法:add_executable(exename source1 source2 ...)
#编译main.cpp生成可执行文件main
add_executable(main main.cpp);
  • target_link_libraries 为target添加需要链接的共享库
    相当于指定g++编译器-l 参数
    语法:target_link_libraries(target library1<debug | optimized>library2)
#将hello动态库文件链接到可执行文件main
target_link_libraries(main hello)
  • add_subdirectory 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
    语法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
#添加src子目录,src中需要一个CMakeList.txt
add_subdirectory(src)
  • aux_source_directory 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个变量临时被用来自动构建源文件列表
    语法:aux_source_directory(dir VARIABlE)
#定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
#编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${
    
    SRC})

四、cmake常用变量

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiaoxiaoguailou/article/details/120879311