突破编程_C++_CMake(单个进程)

单个进程

基本文件准备

创建文件夹 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才可以调试。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值