本文介绍: 内部构建会在同级目录下产生一大堆中间文件,这些中间文件并不是我们最终所需要的,和工程源。gdb 调试程序,其中exefilename为要调试的可执行文件名。以下命令后括号内为命令的简化使用,比如 run(,输入新的名字,回车,会发现所有的文件都修改了。中是删除当前行,后面自定义快键键中,设置与。使程序在指定的代码行上暂停执行,便于观察。单步执行,运行程序,停在第一行执行语句。文件,子目录编译规则体现在主目录的。等,它们内部已经嵌套了相应的调试。单步调试(逐过程,函数直接执行)
前言:
4.1 常用调试命令参数
5.1 界面介绍
5.2 插件安装
C/C++
5.3 快捷键
use:
CMake solve this design flaw by adding extra step to development process. You can describe your project in CMakeLists.txt
file and use
CMake
to generate tools you currently interested in using cross-platform
CMake
code:
file and use
CMake
to generate tools you currently interested in using cross-platform
CMake
code:
Same action – adding new bar.cpp file, will be done in one step now:
6.2 语法特性介绍
set(HELLO hello.cpp)
add_executable(hello main.cpp hello.cpp)
ADD_EXECUTABLE(hello main.cpp ${HELLO})
6.3 重要指令和CMake常用变量
6.3.1 重要指令
# 定义SRC变量,其值为sayhello.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)
nclude_directories - 向工程添加多个特定的头文件搜索路径 --->相当于指定g++编译器的-I参数
语法: include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
# 将/usr/include/myincludefolder 和 ./include 添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)
# 将/usr/lib/mylibfolder 和 ./lib 添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)
语法:add_executable(exename source1 source2 ... sourceN)
# 编译main.cpp生成可执行文件main
add_executable(main main.cpp)
# 将hello动态库文件链接到可执行文件main
target_link_libraries(main hello)
# 添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)
语法: aux_source_directory(dir VARIABLE)
# 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
# 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})
6.3.2 CMake常用变量
1. 这三个变量指代的内容是一致的。
2. 如果是 in source build,指的就是工程顶层目录。
3. 如果是 out-of-source 编译,指的是工程编译发生的目录。
# 编译main.cpp生成可执行文件main
add_executable(main main.cpp)
# 将hello动态库文件链接到可执行文件main
target_link_libraries(main hello)
# 添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)
# 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
# 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})
# 在CMAKE_CXX_FLAGS编译选项后追加-std=c++11
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# 设定编译类型为debug,调试时需要选择debug
set(CMAKE_BUILD_TYPE Debug)
# 设定编译类型为release,发布时需要选择release
set(CMAKE_BUILD_TYPE Release)
4. PROJECT_BINARY_DIR 跟其他指令稍有区别,不过现在,你可以理解为他们是一致
的。
CMAKE_SOURCE_DIR
PROJECT_SOURCE_DIR
_SOURCE_DIR
1. 这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录。
2. 也就是在 in source build时,他跟 CMAKE_BINARY_DIR 等变量一致。
3. PROJECT_SOURCE_DIR 跟其他指令稍有区别,现在,你可以理解为他们是一致的。
6.4 CMake编译工程
添加子目录即可;
6.4.1 编译流程
## 外部构建
# 1. 在当前目录下,创建build文件夹
mkdir build
# 2. 进入到build文件夹
cd build
# 3. 编译上级目录的CMakeLists.txt,生成Makefile和其他文件
cmake ..
# 4. 执行make命令,生成target
make
6.5 【实战】CMake代码实践
6.5.1 最小CMake工程(5.3.1 目录)
目录结构
helloworld.cpp
#include <algorithm>
#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <vector>
using namespace std;
int main(int argc, char *argv[]) {
cout<<"hello world"<<endl;
return 0;
}
CMakeLists.txt
# Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
# Set the project name
project (HELLO)
# Add an executable
add_executable(hello_cmake main.cpp)
#命令 mkdir build ->cd build -> cmake ..(build 文件下生成makefile 内容) ->make
6.5.2 多目录工程 – 直接编译(5.3.2)
目录
include 文件下
include/swap.h
#pragma once
#include <iostream>
using namespace std;
class swap11 {
private:
int _a;
int _b;
public:
void run();
void printInfo();
swap11(int a, int b) {
this->_a = a;
this->_b = b;
}
};
src/
#include "../include/swap.h"
// #include"swap.h"
void swap11::run(){
int temp;
temp=_a;
_a=_b;
_b=temp;
}
void swap11::printInfo(){
cout<<"_a:"<<_a<<endl;
cout<<"_b:"<<_b<<endl;
}
CMakeLists.txt.
# Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
#project name
project(SWAP)
#head file pat
include_directories( include )
#source directory files to var
add_subdirectory( src DIR_SRCS )
#add executable file
add_executable(swap_02 ${TEST_MATH})
#add link library
target_link_libraries(${FS_BUILD_BINARY_PREFIX}sqrt ${LIBRARIES})
6.5.3 多目录工程 – 生成库编译
# Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
#project name
project(SWAP_LIBRARY)
#add compile options
add_compile_options("-Wall -std=c++11")
#set CMAKE_BUILD_TYPE
set( CMAKE_BUILD_TYPE Debug )
# set output binary path
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
############################################################
# Create a library
############################################################
#Generate the static library from the library sources
add_library( swap_library STATIC src/Swap.cpp )
target_include_directories( swap_lib PUBLIC ${PROJECT_SOURCE_DIR}/include )
############################################################
# Create an executable
############################################################
# Add an executable with the above sources
add_executable( swap_01 main.cpp )
# link the new swap_01 target with the swap_lib target
target_link_libraries( swap_01 swap_liby )
#命令 mkdir build ->cd build -> cmake ..(build 文件下生成makefile 内容) ->make
原文地址:https://blog.csdn.net/cat_fish_rain/article/details/134741852
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_24810.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。