CMAKE通用编译结构

cmake作为C/C++常用代码构建工具是在工作生活中常用的。此文章尽量使用一个通用的结构来帮助初学者构建工程。

代码构建的结构如下

build
include
lib
src
---sqlite3
------sqlite3.c
------sqlite3.h
---SQLiteCppInclude
------Assertion.h
---main.cpp
CMakeLists.txt

说明:build目录主要是将cmake进行创建。include放第三方库的头文件。lib放第三方库的文件包括.so和.a文件。src文件夹放程序中需要用到的头文件和CPP、C文件。

CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.0.0)
#设置输出文件的目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/build)
#使用C++11的标准进行
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#设置编译的类型是release
if (NOT DEFINED CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
endif ()
#设置工程名称
project(TrafficLightProject VERSION 0.1.0)
#经过尝试只能放到project的后面
set(CMAKE_CXX_FLAGS "-Wno-psabi -std=c++11 ${CMAKE_CXX_FLAGS}")
message(STATUS "[${CMAKE_CXX_FLAGS}]")
include_directories(./include)
link_directories (./lib)
#添加需要编译的库
set(LINK_LIBS libevent.so
    libevent_core.so
    libevent_extra.so
    libevent_pthreads.so
    libmodbus.a
    libopen62541.a
    libsnap7.so
    libspdlog.a
    libmuparser.so
    libuci.so
)
#设置需要编译的源代码 通过循环的方式将子目录下的文件也加入进去
file(GLOB_RECURSE SRCS CONFIGURE_DEPENDS src/*.c src/*.cpp src/*.h)

add_executable(TrafficLightControl ${SRCS})
target_link_libraries(TrafficLightControl ${LINK_LIBS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

进入到build目录之后,使用如下命令对需要交叉编译的或者需要指定编译器的进行指定。

 cmake .. -DCMAKE_C_COMPILER=arm-openwrt-linux-gcc -DCMAKE_CXX_COMPILER=arm-openwrt-linux-g++

在不进行任何报错之后。使用命令完成代码的编译。编译完的文件在build目录下

make -j4

VSCode生成编译

如果在VSCode中进行代码的调试生成需要相应的设置tasks.json和launch.json。

其中launch.json如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/testcamke.exe", // 步骤1 修改可执行文件路径
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build",  // 步骤2 配置自动化生成任务
        }
    ]
}

tasks.json文件内容如下:

{
	"version": "2.0.0",
	"options": {
		"cwd": "${workspaceFolder}/build"
	},
	"tasks": [
		{
			"label": "cmake",
			"type": "shell",
			"command": "cmake",
			"args": [
				".."
			]
		},
		{
			"label": "make",
			"group": {
				"kind": "build",
				"isDefault": true
			},
			//"command": "make",//linux 下用make
			"command": "mingw32-make.exe",
			"args": []
		},
		{
			"label": "Build",
			"dependsOrder": "sequence", //按顺序执行任务依赖项
			"dependsOn":[
				"cmake",
				"make"
			]
		}
	]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值