CMakeList 将CPP代码编译成可执行文件示例

2023-05-16

一、本次编译,CMakeList中用到的语法详解

1、设置cmake 版本:cmake_minimum_required(VERSION 3.5)

2、# set the project name

project(Agent_Test)

3、设置debug或者release

set(CMAKE_BUILD_TYPE debug)

set(CMAKE_BUILD_TYPE Release)

4、将头文件目录告诉编译器

include_directories()

5、设置编译可执行文件的存放路径:set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

6、设置.a静态库或者.so动态库的加载路径

link_directories(thirdlib/libuv-1.42.0/lib thirdlib/lib)

7、设置需要编译的cpp代码

add_executable(Agent_Test

main.cpp)

8、设置要链接的库文件的名称

target_link_libraries(Agent_Test    liblog.so libuv_a.a libcutils.a)

这里说一下,像libpthread.so等一些系统库,即使代码中没有,编译时会去系统特定存放库的目录中查找

9、.a静态库和.so动态库的区别

库中可能还引用了一些第三方库,如果是静态库,这些第三方库会一起打包进静态库中;如果是动态库的话,库中引用的第三方库则不会被打包到动态库中。

因此,同等库,静态库往往比动态库大

10、加载代码本地库的方法:

(1)、第一种方法:

添加需要链接的库文件目录:link_directories()

target_link_libraries(Agent_Test  xxx.so   xx.a)

(2)第二种方法:

动态库:

add_library(libc++ SHARED IMPORTED)

set_target_properties(libc++  PROPERTIES IMPORTED_LOCATION

                   thirdlib/lib/libc++.so)

静态库:

add_library(libcutils STATIC IMPORTED)

 set_target_properties(libcutils  PROPERTIES IMPORTED_LOCATION

                      thirdlib/lib/libcutils.a)

二、一个项目中使用,完整的CMakeList.txt ,仅供参考

cmake_minimum_required(VERSION 3.5) 

# set the project name 
project(Agent_Test) 


set(CMAKE_BUILD_TYPE debug)

IF(NOT CMAKE_BUILD_TYPE)
  SET(CMAKE_BUILD_TYPE Release)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})


#1、将头文件目录告诉编译器
include_directories(
api 
base
tools 
net 
interface 
controller 
http 
cjsonObject 
thirdlib/jsoncpp/include
thirdlib/libuv-1.42.0/include
thirdlib/cutils/include
thirdlib/log/include
)


set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)







#2、添加需要链接的库文件目录
link_directories(thirdlib/libuv-1.42.0/lib   thirdlib/lib)


#Linux使用pthread 需添加下面这句,不然会报错
# link_libraries(pthread)



# add_library(libc++ SHARED IMPORTED)
# set_target_properties(libc++  PROPERTIES IMPORTED_LOCATION
#                      thirdlib/lib/libc++.so)


# add_library(libcutils SHARED IMPORTED)
# set_target_properties(libcutils  PROPERTIES IMPORTED_LOCATION
#                       thirdlib/lib/libcutils.so)

# add_library(libpthread SHARED IMPORTED)
# set_target_properties(libpthread  PROPERTIES IMPORTED_LOCATION
#                       thirdlib/lib/libpthread.so)





add_executable(Agent_Test
main.cpp 
tools/utils.cpp
api/agent_api.cpp
api/agent_server.cpp
net/connection_base.cpp
net/tcp_connection.cpp
net/tcp_srv.cpp
net/uv_event.cpp
controller/query_dispose.cpp
controller/query_dispose2.cpp
base/event.cpp
base/buffer.cpp
base/lock.cpp
base/message.cpp
base/message2.cpp
base/que.cpp
base/task.cpp
base/base64.cpp
thirdlib/jsoncpp/src/lib_json/json_reader.cpp
thirdlib/jsoncpp/src/lib_json/json_writer.cpp
thirdlib/jsoncpp/src/lib_json/json_value.cpp
)





#3、设置要链接的库文件的名称
target_link_libraries(Agent_Testliblog.so  libuv_a.a  libcutils.a  libclang_rt.ubsan_minimal-aarch64-android.a) 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMakeList 将CPP代码编译成可执行文件示例 的相关文章

随机推荐

  • Collecting package metadata (current_repodata.json): failed的问题解决

    解决方法 1 删除 condarc文件 2 关闭VPN 3 https的锅 xff0c 详情看下面的博客 环境配置 Collecting package metadata current repodata json failed的问题解决
  • 作业1:CAN数据库配置(DBC)

    目录 一 首先如何创建dbc文件 二 创建 三 创建节点NODE 一 其它 xff08 共1题 xff0c 100分 xff09 1 其它 使用vector candb editor软件 xff0c 按给定的信号矩阵配置CAN xff0c
  • Visual Studio 2022 C++下载及配置

    下载地址 xff1a https visualstudio microsoft com zh hans vs 之后点击右下角的安装 xff1b 如果下载速度一直为0 xff0c 那么解决方法为 xff1a 修改电脑的DNS服务器地址为8 8
  • app测试和web测试的区别

    1 功能方面 xff1a 在流程和功能测试上是没有区别的 xff0c 系统测试和一些细节可能会不一样 那么我们就要先来了解 xff0c web和app的区别 xff1a web项目 xff0c 一般都是b s架构 xff0c 基于浏览器的
  • Java网络编程实现

    前言 计算机网路实现了多个网络终端的互联 xff0c 彼此之间能够进行数据交流 而网络应用程序就是在已连接的不同终端设备上运行的程序 xff0c 这些网络程序相互之间可以进行数据交互 网络程序的数据交互则依赖于TCP IP协议 xff0c
  • java对象转JSONObject、JSONObject转java对象及String转JSONObject

    JSONObject jo 61 JSONObject JSONObject toJSON javaBean Student stu 61 JSONObject parseObject jo Student class JSONObject
  • redis设置密码

    设置密码有两种方式 1 命令行设置密码 运行cmd切换到redis根目录 xff0c 先启动服务端 gt redis server exe 另开一个cmd切换到redis根目录 xff0c 启动客户端 gt redis cli exe h
  • 【Java】Java四舍五入保留1位小数、2位小数

    方法一 xff1a 使用字符串格式化实现四舍五入 支持float和double类型 double data 61 3 02 利用字符串格式化的方式实现四舍五入 保留1位小数 String result 61 String format 34
  • ROS: [xxx.launch] is neither a launch file in package

    在ROS执行launch文件的过程中 xff0c 我经常碰见这个问题 xff0c 比如最近在安装ARBOTIX仿真器的时候 sudo apt get install ros indigo arbotix rospack profile 安装
  • SpringBoot文件上传

    文件上传 Spring MVC对文件上传做了简化 xff0c 在Spring Boot中对此做了更进一步的简化 xff0c 文件上传更为方便 Java中的文件上传一共涉及两个组件 xff0c 一个是CommonsMultipartResol
  • Django-图书管理系统(含源码)

    前段时间翻文件发现了以前学习python和django时做的一个系统 xff0c 当时的想法是将这玩意做出来应付web开发大作业 课程设计作业甚至是毕设用的 xff0c 实际上也确实应付了课程设计 xff0c 功能虽然不算多 xff0c 但
  • Android Studio 实现登录注册-源代码 (连接MySql数据库)

    Android Studio 实现登录注册 源代码 xff08 连接MySql数据库 xff09 Android Studio 实现登录注册 源代码 二 xff08 Servlet 43 连接MySql数据库 xff09 Android S
  • MySQL8重置root账户密码图文教程

    root账户为MySQL的超级管理员用户 xff0c 拥有MySQL提供的所有权限 我们登录了root账户可以重置其它创建的所有用户的密码 xff0c 那么root账户的密码忘记了怎么办呢 xff1f 由于版本和安装环境的不同 xff0c
  • docker执行权限问题Got permission denied while trying to connect to the Docker daemon socket

    安装docker之后 xff0c 执行docker images等命令 xff0c 提示权限问题 xff0c 报错如下 xff1a Got permission denied while trying to connect to the D
  • @ServletComponentScan和@ComponentScan 注解

    springboot 项目启动类中我们经常见到这两个注解 64 ServletComponentScan和 64 ComponentScan 下面我们就言简意赅的介绍一下这两个注解的作用 一 64 ServletComponentScan
  • MySQL中使用序列-Sequence

    在Oracle数据库中若想要一个连续的自增的数据类型的值 xff0c 可以通过创建一个sequence来实现 而在MySQL数据库中并没有sequence 通常如果一个表只需要一个自增的列 xff0c 那么我们可以使用MySQL的auto
  • SpringMVC获取请求参数

    CSDN话题挑战赛第1期 活动详情地址 https marketing csdn net p bb5081d88a77db8d6ef45bb7b6ef3d7f 大家好 我是郭尕 SpringMVC获取请求参数 一 前言 二 通过控制器方法的
  • 搞定Redis(三)消息的发布、订阅和新增数据类型

    一 Redis的发布和订阅 1 什么是发布和订阅 Redis 发布订阅 pub sub 是一种消息通信模式 xff1a 发送者 pub 发送消息 xff0c 订阅者 sub 接收消息 Redis 客户端可以订阅任意数量的频道 2 Redis
  • 智能控制——模糊数学及控制

    一 模糊控制概况 模糊逻辑控制 Fuzzy Logic Control 简称模糊控制 Fuzzy Control xff0c 是以模糊集合论 模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制技术 1965年 xff0c 美国的L A Z
  • CMakeList 将CPP代码编译成可执行文件示例

    一 本次编译 CMakeList中用到的语法详解 1 设置cmake 版本 xff1a cmake minimum required VERSION 3 5 2 set the project name project Agent Test