基于VSCode&CMake的开发环境

基于VSCode&CMake的开发环境

基础语法

  1. 各种语法前提:

    指令(函数)大小写不敏感,变量和参数大小写敏感

  2. 变量的创建与赋值

    使用set函数:set(HELLO hello.cpp)

    即创建变量HELLO,并赋值为hello.cpp

  3. 变量的调用

    和花括号表明调用变量,注意,变量大小写敏感: 和花括号表明调用变量,注意,变量大小写敏感: 和花括号表明调用变量,注意,变量大小写敏感:{HELLO}

    if语句调用变量时,直接用变量名即可,禁止使用${}的形式

    需要调用大量源文件时,通常会用set()创建一个变量,对所有需要的源文件进

    行打包,然后调用这个变量,调用时记得添加${}

  4. 目录(地址)的表示

    .
    ./			# 表示当前目录
    
    ..
    ../			# 表示上级目录,以此类推
    

重要指令

  1. []方括号表示可选项,实际使用时,不要加

  2. 最低CMake版本要求

    cmake_minimum_required(VERSION 具体版本号 [不满足时的报错信息])

  3. 定义工程名称

    project(工程名称 [指定支持语言])

  4. 显式地定义变量

    set(变量名 变量内容,可包含多个,用空格分隔)

  5. 向工程添加多个特定的头文件搜索路径(.h .hpp等)

    include_directories(多个头文件路径,绝对相对均可)

  6. 向工程添加多个特定的库文件搜索路径(包括.so .lib .dll .a等)

    link_directories(多个库文件路径,绝对相对均可)

  7. 生成库文件

    add_library(自定义库名称 库类型 源文件)

    库类型:静态库STATIC、共享库.so SHARED、模块MODULE

  8. 添加编译参数

    add_compile_options(-wall -std=c++11 -o2)

    -wall:显示所有警告

    -std=c++11:执行c++11编译标准

    -o2:代码优化等级2级

  9. 添加可执行文件

    add_executable(生成可执行文件名称 源文件)

  10. 为(将要)生成的可执行文件添加需要链接的共享库

    target_link_libraries(可执行文件名称 目标库名称)

    可执行文件名称需要与add_executable中使用的名称相同,不需要后缀

    目标库名称需要和add_library中使用的名称相同,不需要后缀

    即表明生成文件,依赖于目标库运行

  11. 向当前工程添加存放源文件的子目录(可以指定中间二进制和目标二进制存放的位置)

    add_subdirectory((source_dir [binary_dir] [EXCLUDE_FROM_ALL]))

    source_dir
    必选参数。该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。子目录可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前目录的一个相对路径。

    binary_dir
    可选参数。该参数指定一个目录,用于存放输出文件。可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前输出目录的一个相对路径。如果该参数没有指定,则默认的输出目录使用source_dir

    当采用外部构建时(假定构建在build文件夹下),会自动生成生成一个名为binary_dir的文件夹,若未指定binary_dir的参数,则生成生成一个名为source_dir的文件夹

    该参数通常指定为bin,生成在build目录下

    EXCLUDE_FROM_ALL
    可选参数。当指定了该参数,则子目录下的目标不会被父目录下的目标文件包含进去,父目录的CMakeLists.txt不会构建子目录的目标文件,必须在子目录下显式去构建。例外情况:当父目录的目标依赖于子目录的目标,则子目录的目标仍然会被构建出来以满足依赖关系(例如使用了target_link_libraries)

  12. 发现目标目录下所有的源文件,并用一个变量表示其整体

    aux_source_directory(目标目录 变量名称)

    该指令用于自动构建临时源文件列表,类似于set命令

常用变量

  1. 变量使用方式

    使用set()指令

    set(目标变量 目标选项)

    # 设定 使用C++11标准编译
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    # 设定 编译类型为发布
    set(CMAKE_BUILD_TYPE Release)
    
  2. gcc编译选项

    CMAKE_C_FLAGS

  3. g++编译选项

    CMAKE_CXX_FLAGS

  4. 编译类型选项

    CMAKE_BUILD_TYPE

    调试debug/发布release

  5. 可执行文件的输出存放路径

    EXECUTABLE_OUTPUT_PATH

  6. 库文件的输出存放路径

    LIBRARY_OUTPUT_PATH

借助CMake编译工程

编译规则

  1. 工程主目录下一定要有一份CMakeLists.txt
  2. 如果包含源文件的子目录下,存在CMakeLists.txt,则在父文件夹的CMakeLists.txt中,使用add_subdirectory()添加子目录即可
  3. 如果包含源文件的子目录下,不存在CMakeLists.txt,则在父文件夹的CMakeLists.txt中,需要具体写明子目录中所有文件的编译规则

编译流程

  1. 环境:Linux、VSCode、CMake、C/C++

  2. 编写CMakeLists.txt

  3. 执行cmake PATH,以生成Makefile

    PATH是工程顶层CMakeLists.txt所在目录,绝对相对均可

  4. 执行make,以生成可执行文件

构建方式

通常使用外部构建,即将生成的各种文件均存放到build文件夹中;

而外部构建会将所有生成文件存放在工程的顶层目录,会导致工程不整洁,查找文件不方便。

你可能感兴趣的:(c++)