Ubuntu下CMakeLists.txt和VSCode配置文件学习记录

一、CMakeLists.txt

项目组织目录如图:

CMakeLists.txt文件可以按照下面这样写:

	# 1.cmake verson,指定cmake版本
	cmake_minimum_required(VERSION 3.10.2)
	
	# 2.指定项目的名称,一般和项目的文件夹名称对应,声明一个cmake工程,工程名为IMUtest
	PROJECT(IMUtest)
	
	# 3.设置编译器编译模式,对于编译用的Debug模式和调试用的Release模式,在Debug模式中,程序运行较慢,当可以在IDE中进行断点调试,而Release模式则速度较快,但没有调试信息。不设置默认是Debug模式。
	set( CMAKE_BUILD_TYPE "Debug")
	
	# 4.添加引用的头文件,此项目main.cpp引用的头文件有serialport.h,因此需要添加头文件目录,因为和CMakeList.txt同级,所以此处目录只写include即可,应写对头文件所在的目录,以防找不到相应的头文件而报错,如果难以确定就直接写上绝对路径即可
	include_directories(include)    #其实头文件也可以放在源文件所在的文件夹中,这样就不用添加此命令,但是为了整个工程的简洁干净便于管理,所以建议放到include文件夹中。
	# 也可以将include_directories全部大写,INCLUDE_DIRECTORIES(include)
	
	# 5.src下面有两个.cpp需要编译,相应的库函数也都有,这个时候可以执行下面的步骤
	# 将源文件目录/路径 src赋值给DIR_SRCS
	AUX_SOURCE_DIRECTORY(src DIR_SRCS)

    # 6.添加要编译的可执行文件,编译main.cpp,生成可执行文件名称是main,也可以写成${PROJECT_NAME},即为当前项目名称IMUtest
	add_executable(main {DIR_SRCS})
    
    #5和6也可以合在一起写,添加要编译的所有源文件,源文件少可以这样写
    # add_executable(main src/main.cpp src/serialport.cpp)

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

也可以将serialport.cpp编译成动态链接库libserialport.so,此时CMakeLists.txt文件可以按照下面这样写:

	# 1.cmake verson,指定cmake版本
	cmake_minimum_required(VERSION 3.10.2)
	
	# 2.指定项目的名称,一般和项目的文件夹名称对应,声明一个cmake工程,工程名为IMUtest
	PROJECT(IMUtest)
	
	# 3.设置编译器编译模式,对于编译用的Debug模式和调试用的Release模式,在Debug模式中,程序运行较慢,当可以在IDE中进行断点调试,而Release模式则速度较快,但没有调试信息。不设置默认是Debug模式。
	set( CMAKE_BUILD_TYPE "Debug")
	
	# 4.添加引用的头文件,此项目main.cpp引用的头文件有serialport.h,因此需要添加头文件目录,因为和CMakeList.txt同级,所以此处目录只写include即可,应写对头文件所在的目录,以防找不到相应的头文件而报错,如果难以确定就直接写上绝对路径即可
	include_directories(include)    #其实头文件也可以放在源文件所在的文件夹中,这样就不用添加此命令,但是为了整个工程的简洁干净便于管理,所以建议放到include文件夹中。
	# 也可以将include_directories全部大写,INCLUDE_DIRECTORIES(include)
	
	# 5.编译生成库文件,下面命令把源文件serialport.cpp编译成名字为“serialport”的共享库libserialport.so
	add_library(serialport SHARED src/serialport.cpp)

    # 6.添加要编译的可执行文件,编译main.cpp,生成可执行文件名称是main,也可以写成${PROJECT_NAME},即为当前项目名称IMUtest
	add_executable(main src/main.cpp)

    # 7.add link library,添加可执行文件所需要的库,比如main用到了libserialport.so,添加该库的名称
	target_link_libraries(main serialport)  #可执行文件main链接到共享库文件库libSum.so,可执行程序即可调用库文件中的函数

	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

新建build文件夹,在build文件夹执行Cmake,make就可以成功编译并生成可执行文件

mkdir build
cd build 
cmake ..
make

在build文件夹下生成动态库libserialport.so和可执行文件main

如果项目中用到了第三方库,如opencv库,则首先需要安装opencv库,安装参考下面的博客,亲测无报错

博客地址:

https://www.cnblogs.com/booturbo/p/17399215.htmlicon-default.png?t=N7T8https://www.cnblogs.com/booturbo/p/17399215.html

上面的博客中配置opencv环境时,使用gedit编辑

sudo gedit /etc/profile.d/pkgconfig.sh

在pkgconfig.sh添加环境变量并执行生效命令后下一步检查发现没有添加成功,可以改用vi编辑,输入下面的命令:

 sudo vi /etc/profile.d/pkgconfig.sh

按i启用编译,加入环境变量后按:,再输入wq!保存并退出

用到opencv的项目CMakeLists.txt文件可以按照下面这样写:

	# 1.cmake verson,指定cmake版本
	cmake_minimum_required(VERSION 3.10.2)
	
	# 2.指定项目的名称,一般和项目的文件夹名称对应,声明一个cmake工程,工程名为IMUtest
	PROJECT(IMUtest)
	
	# 3.设置编译器编译模式,对于编译用的Debug模式和调试用的Release模式,在Debug模式中,程序运行较慢,当可以在IDE中进行断点调试,而Release模式则速度较快,但没有调试信息。不设置默认是Debug模式。
	set( CMAKE_BUILD_TYPE "Debug")
	
	# 4.添加引用的头文件,此项目main.cpp引用的头文件有serialport.h,因此需要添加头文件目录,因为和CMakeList.txt同级,所以此处目录只写include即可,应写对头文件所在的目录,以防找不到相应的头文件而报错,如果难以确定就直接写上绝对路径即可
	include_directories(include)    #其实头文件也可以放在源文件所在的文件夹中,这样就不用添加此命令,但是为了整个工程的简洁干净便于管理,所以建议放到include文件夹中。
	# 也可以将include_directories全部大写,INCLUDE_DIRECTORIES(include)
	
	# 5.编译生成库文件,下面命令把源文件serialport.cpp编译成名字为“serialport”的共享库libserialport.so
	add_library(serialport SHARED src/serialport.cpp)

    #查找依赖包,理想情况下,find_package能把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到
	find_package(OpenCV REQUIRED)
	# 输出相关信息
	message(STATUS "OpenCV library status:")
	message(STATUS "    config: ${OpenCV_DIR}")
	message(STATUS "    version: ${OpenCV_VERSION}")
	message(STATUS "    libraries: ${OpenCV_LIBS}")
	message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

    # 6.添加要编译的可执行文件,编译main.cpp,生成可执行文件名称是main,也可以写成${PROJECT_NAME},即为当前项目名称IMUtest
	add_executable(main src/main.cpp)

    # 7.add link library,添加可执行文件所需要的库,比如main用到了libserialport.so,添加该库的名称
	target_link_libraries(main serialport)    #可执行文件main链接到共享库文件库libSum.so,可执行程序即可调用库文件中的函数
    target_link_libraries(main ${OpenCV_LIBS})    #链接opencv库

	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

二、VSCode配置文件

配置第一步:卸掉run code插件,只针对单个文件且不依赖其他库的情况下点击一下就运行才好用,当编译多个文件或者引用了其他库的时候迅速卸载!!!!

三个配置文件

1.c_cpp_properties.json,内容如下:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                //opencv包含路径,告诉编译器头文件在哪里,添加后源文件中包含opencv头文件不会有红线
                "/usr/local/include/opencv4" 
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

2.launch.json,负责调试的文件,内容如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            //debug要用的可执行文件的路径及名称,要与task.json中生成的保持一致
            "program": "${workspaceFolder}/build/main",
            "args": ["para1", "para2"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            //启用调试要预先处理的任务:在task.json里面定义有两个任务
            //一个是使用g++的g++ build;一个是使用cmake的cmake build
            "preLaunchTask": "cmake build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

3.tasks.json

{
	"version": "2.0.0",
	"tasks": [
        //-----------------------cmake build任务------------------------------//
        //下面这段相当于在 “项目目录/build” 路径下去执行"Cmake .."命令,
        //".."是因为CMakeLists.txt是在项目目录下
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args":[
                ".."
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }
        },
        //下面这段相当于在 “项目目录/build” 路径下去执行"make"命令
        {
            "label": "make",
            "type": "shell",
            "command": "make",
            "args":[
                ""
            ],
            //make要依赖于Cmake生成的Makefile文件,所以这里要依赖于cmake
            "dependsOn": [
                "cmake"
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }
        },
        //定义cmake build任务,它依赖于make,而make又依赖于cmake
        {
            "label": "cmake build",
            "dependsOn": [
                "make"
            ]
        },
        //----------------------------------g++ build任务-----------------------------------//
        {
            "label": "g++ build",
            "type": "cppbuild",
            "command":"g++",
            "args": [
                "-g",
                //下面是编译的源文件,根据实际情况进行修改
                "${file}",
                "-o",
                //下面是生成的可执行文件的路径及名称,“项目目录/build” 路径下生成main
                //g++默认的是在XX.cpp目录下生成名为XX的可执行文件,而cmake默认的是在执行目录下生成main
                "${workspaceFolder}/build/main",
                //下面是依赖的opencv头文件和库,使用下面这条代码需要对opencv进行配置
                "`pkg-config --libs --cflags opencv4`"
                //也可以手动添加opencv的头文件和库目录,库用了几个加几个,不够优雅,比如:
                /*
                "-I","/usr/local/include/opencv4"
                "-L","/usr/local/lib"
                "/usr/local/lib/用到的opencv库名"
                */
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher":[
                "$gcc"
            ],
        "group":"build",
        "detail":"compiler:/usr/bin/g++"
        }
    ],
}

三个文件配置好以后,就可以优雅地运行或者调试代码了

(1)选择配置的任务cmake build,就会在build文件夹下生成可执行文件和makefile等一堆文件,跟上面的“新建build文件夹,在build文件夹执行Cmake,make就可以成功编译并生成可执行文件”效果一模一样

(2)选择配置的任务g++ build,就会在build文件下生成可执行文件main

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CMakeLists.txt 文件是用于配置和构建 CMake 项目的文件。它包含了项目的元信息、依赖项、编译选项和构建规则等信息。在使用 Visual Studio Code (VSCode) 进行 C/C++ 开发时,CMakeLists.txt 文件是非常重要的。 为了在 VSCode 中使用 CMakeLists.txt 文件进行项目开发,你需要进行以下几个步骤: 1. 安装插件:首先,你需要在 VSCode 中安装 "CMake Tools" 插件。可以通过在插件商店中搜索 "CMake Tools" 并安装。 2. 打开项目文件夹:在 VSCode 中打开你的 CMake 项目所在的文件夹。 3. 配置 CMakeLists.txt:在你的项目文件夹中,找到或创建 CMakeLists.txt 文件。这个文件通常位于项目的根目录下,用于配置项目的构建规则和选项。 4. 配置构建目录:在 VSCode 的工作区设置中,配置构建目录。这样 VSCode 才能正确地识别和使用 CMakeLists.txt 文件。你可以在 `.vscode/settings.json` 文件中添加以下内容: ```json { "cmake.configureSettings": { "CMAKE_BUILD_TYPE": "${buildType}", "CMAKE_INSTALL_PREFIX": "${installDir}" }, "cmake.buildDirectory": "${workspaceFolder}/build" } ``` 这里的 `build` 目录是一个常用的构建目录,你也可以根据需要自定义。 5. 配置工具链:如果你的项目需要使用特定的编译器或工具链,你可以在 CMakeLists.txt 文件中进行配置。例如,你可以使用 `set(CMAKE_C_COMPILER "/path/to/gcc")` 来指定使用特定的 C 编译器。 6. 构建项目:在 VSCode 左侧的侧边栏中,点击 "CMake" 图标来打开 CMake 工具面板。在面板中,点击 "Configure" 按钮来配置项目。然后点击 "Build" 按钮来构建项目。 通过上述步骤,你就可以在 VSCode 中使用 CMakeLists.txt 文件进行项目的配置和构建了。希望对你有帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值