单个进程
基本文件准备
创建文件夹 demo,并在该文件夹下创建源代码文件以及 “CMakeLists.txt”。
在该文件夹下创建 “build” 文件夹。
源码目录以及构建目录
./demo/
|--build
|--CMakeLists.txt
|--my_add.h
|--my_add.cpp
|--main.cpp
build文件夹
该文件夹下存放编译时的各类缓存文件,重新编译可以进入到该文件夹路径下,执行:
rm -r *
即可删除全部子文件夹以及子文件。
也可以使用CMake的操作文件以及文件夹的命令清空缓存。
my_add.h
#ifndef __DEMO_ADD_H
#define __DEMO_ADD_H
#include <iostream>
int my_add(int a, int b);
#endif
my_add.cpp
#include "my_add.h"
int my_add(int a, int b)
{
return a+b;
}
main.cpp
#include <iostream>
#include "my_add.h"
using namespace std;
int main()
{
int a = 1;
int b = 2;
cout << my_add(a,b) << endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required (VERSION 3.22)
#是否清除缓存
if((CLEAR AND (${CLEAR} STREQUAL "1")) OR (clear AND (${clear} STREQUAL "1")))
file(REMOVE "${CMAKE_SOURCE_DIR}/build/cmake_install.cmake")
file(REMOVE "${CMAKE_SOURCE_DIR}/build/CMakeCache.txt")
file(REMOVE "${CMAKE_SOURCE_DIR}/build/CMakefile")
file(REMOVE_RECURSE "${CMAKE_SOURCE_DIR}/build/CMakeFiles")
endif()
project (demo)
#定义编译位数
set(CMAKE_BUILD_PLATFORM "-m64")
#set(CMAKE_BUILD_PLATFORM "-m32")
#定义编译类型
set(CMAKE_BUILD_TYPE "debug")
#set(CMAKE_BUILD_TYPE "release")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_BUILD_PLATFORM}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_BUILD_PLATFORM}")
if((${CMAKE_BUILD_PLATFORM} STREQUAL "-m64") AND (${CMAKE_BUILD_TYPE} STREQUAL "debug"))
if(CLEAR OR clear)
file(REMOVE "${CMAKE_SOURCE_DIR}/X64/Debug/${PROJECT_NAME}")
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/X64/Debug)
endif()
if((${CMAKE_BUILD_PLATFORM} STREQUAL "-m64") AND (${CMAKE_BUILD_TYPE} STREQUAL "release"))
if(CLEAR OR clear)
file(REMOVE "${CMAKE_SOURCE_DIR}/X64/Release/${PROJECT_NAME}")
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/X64/Release)
endif()
if((${CMAKE_BUILD_PLATFORM} STREQUAL "-m32") AND (${CMAKE_BUILD_TYPE} STREQUAL "debug"))
if(CLEAR OR clear)
file(REMOVE "${CMAKE_SOURCE_DIR}/X86/Debug/${PROJECT_NAME}")
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/X86/Debug)
endif()
if((${CMAKE_BUILD_PLATFORM} STREQUAL "-m32") AND (${CMAKE_BUILD_TYPE} STREQUAL "release"))
if(CLEAR OR clear)
file(REMOVE "${CMAKE_SOURCE_DIR}/X86/Release/${PROJECT_NAME}")
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/X86/Release)
endif()
file(GLOB HEADER ${CMAKE_SOURCE_DIR}/*.h)
file(GLOB SOURCE ${CMAKE_SOURCE_DIR}/*.cpp)
add_executable(
${PROJECT_NAME}
${HEADER}
${SOURCE}
)
注:设置变量CMAKE_BUILD_TYPE时,其不区分大小写,以debug为例,里面的Debug可以替换成Debug,debug,DEBUG,甚至deBug,都会被当成是一样的。
编译64位Debug版本
1、修改CMakeLists.txt文件
...
#定义编译位数
set(CMAKE_BUILD_PLATFORM "-m64")
#set(CMAKE_BUILD_PLATFORM "-m32")
#定义编译类型
set(CMAKE_BUILD_TYPE "debug")
#set(CMAKE_BUILD_TYPE "release")
...
2、执行cmake命令(在build文件夹目录)
2.1、清空缓存的方式
cmake -Dclear=1 ..
2.2、不清空缓存的方式
cmake -Dclear=0 ..
3、执行build命令(在build文件夹目录)
cmake --build .
编译64位Release版本
1、修改CMakeLists.txt文件
...
#定义编译位数
set(CMAKE_BUILD_PLATFORM "-m64")
#set(CMAKE_BUILD_PLATFORM "-m32")
#定义编译类型
#set(CMAKE_BUILD_TYPE "debug")
set(CMAKE_BUILD_TYPE "release")
...
2、执行cmake命令(在build文件夹目录)
2.1、清空缓存的方式
cmake -Dclear=1 ..
2.2、不清空缓存的方式
cmake -Dclear=0 ..
3、执行build命令(在build文件夹目录)
cmake --build .
编译32位Debug版本
注:编译32位程序必须要g++支持!
...
#定义编译位数
#set(CMAKE_BUILD_PLATFORM "-m64")
set(CMAKE_BUILD_PLATFORM "-m32")
#定义编译类型
set(CMAKE_BUILD_TYPE "debug")
#set(CMAKE_BUILD_TYPE "release")
...
2、执行cmake命令(在build文件夹目录)
2.1、清空缓存的方式
cmake -Dclear=1 ..
2.2、不清空缓存的方式
cmake -Dclear=0 ..
3、执行build命令(在build文件夹目录)
cmake --build .
编译32位Release版本
注:编译32位程序必须要g++支持!
...
#定义编译位数
#set(CMAKE_BUILD_PLATFORM "-m64")
set(CMAKE_BUILD_PLATFORM "-m32")
#定义编译类型
#set(CMAKE_BUILD_TYPE "debug")
set(CMAKE_BUILD_TYPE "release")
...
2、执行cmake命令(在build文件夹目录)
2.1、清空缓存的方式
cmake -Dclear=1 ..
2.2、不清空缓存的方式
cmake -Dclear=0 ..
3、执行build命令(在build文件夹目录)
cmake --build .
VScode调试配置
1、使用VScode打开demo文件夹。
2、点击VScode左侧的调试按钮,点击"创建 launch.json 文件"。
3、编辑launch.json 文件
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/X64/Debug/demo",
"args": [
""
],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
注:需要将demo程序以debug模式编译,VScode才可以调试。