cmake 构建工程所需软件
软件名 | 作用 |
---|---|
cmake | 用于构建项目生成makefile |
mingw | 提供make gcc g++ 编译工具链 |
vscode | 编辑工具 |
vscode/cmake | 用于将在vscode中构建项目 |
vscode/cmake tools | 用于vscode中对cmake语法提示 |
安装以上软件并添加环境变量
vscode中构建测试项目
main.c
#include<stdio.h>
int main(void)
{
printf("Hello,World\n");
return 0;
}
CMakeLists.txt
#cmake最低版本需求,不加入此行会受到警告信息
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(HELLO) #项目名称
#把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST
AUX_SOURCE_DIRECTORY(. SRC_LIST)
#生成应用程序 hello
ADD_EXECUTABLE(hello ${SRC_LIST})
vscode中创建 tasks.json和了launch.json
- 打开项目任意源文件很重要,打开源文件按照后面操作才会产生tasks.json
- 点击调试选择【创建launch.json文件】,选择【C++/(GDBLLDB)】–>【gcc.exe生成或调试活动文件】,到处cmake构建项目完成
- 切换到源文件,【shif + ctrl +b】 编译
- 调试 【F5】
cmake 编译
mkdir build
cd build
cmake ./../
添加头文件路径
#添加头文件路径
include_directories(func)
添加源码目录
# 添加源码目录
add_subdirectory(func)
遍历目录源文件
# 遍历目录中所有源文件
aux_source_directory(. DIR_SRCS)
编译库
#add_library(project1 ${src}) #编译为静态库
#add_library(project1 SHARED ${src}) #编译为动态链接库
#编译为静态库
add_library( src ${DIR_SRCS})
cmaek 定义便利并赋值
SET(USER_KEY, "Hello World")
cmaek 打印
输出错误 FATAL_ERROR
message(FATAL_ERROR "
FATAL: In-source builds are not allowed")
输出警告 WARNING
message(WARNING "OpenCV requires Android SDK tools revision 14 or newer.")
输出正常 STATUS
message(STATUS "Can't detect runtime and/or arch")
打印便利
SET(USER_KEY, "Hello World")
MESSAGE( STATUS "this var key = ${USER_KEY}.")
message(STATUS "Can't detect runtime and/or arch")
cmake 比较字符串
if(${arch} STREQUAL "arm")
message(STATUS "输入相同")
else
message(STATUS "输入不同")
endif()
cmake 条件语句
#根据输入变量选择编译工具
if(${arch} STREQUAL "arm")
elseif(${arch} STREQUAL "x86")
endif()
cmake 动态选择编译工具 (传参)
传递进去都是字符串
cmake . -Darch="x86"
cmake . -Darch="arm"
#根据输入变量选择编译工具
if(${arch} STREQUAL "arm")
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_C_COMPILER "/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc")
set(CMAKE_CXX_COMPILER "/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++")
elseif(${arch} STREQUAL "x86")
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/g++")
endif()