栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

cmake

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cmake

c++系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 c++学习入门之cmake的使用
:本文具体代码已上传到github上,欢迎star

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • c++系列文章目录
    • ` 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加` 例如:第一章 c++学习入门之cmake的使用 :[本文具体代码已上传到github上,欢迎star](https://github.com/JackZhang9/cmakExam)
  • 前言
  • 一、cmake是什么?
  • 二、使用步骤
    • 1.指定最小版本
    • 2.设置项目名称
    • 3.设置编译类型
    • 4.指定编译时包含的源文件
    • 5.查早指定的库文件
    • 6.设置包含的目录们
    • 7.设置链接库搜索目录
    • 8.设置target需要链接的库
    • 9.设置变量
    • 新建一个cmake_lists.txt文件
      • 在include下建一个static
      • 在src下编写.cpp源文件
      • 在src下编写main.cpp文件
      • 开始编译
  • 对CMakeLists.txt做一点修改
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、cmake是什么?

cmake是一个方便构建多文件c++代码的软件。

二、使用步骤 1.指定最小版本
cmake_minimum_required(VERSION 3.0.0)
2.设置项目名称
project(TSET)
3.设置编译类型
add_executable(TSET TSET.cpp) #生成可执行文件
add_library(common STATIC util.cpp) #生成静态库
add_library(common SHARED util.cpp) #生成共享库

在ubuntu下,依次生成TSET,libcommon.a,libcommon.so

4.指定编译时包含的源文件

有多种方式去指定:
1.穷举出要使用的源文件,适合源文件个数较少时使用

add_library(TSET TSET.cpp calculateSqrt.cpp util.cpp)

2.搜索一个目录下所有的源文件,并保存到一个变量中

//.表示当前目录,SRC_LIST是变量名
aux_source_directory(. SRC_LIST)
add_library(TSET ${SRC_LIST})

3.自定义搜索规则

file(GLOB SRC_LIST "*.cpp" "protocol
public:
 int print(); //成员函数
};

#endif
在src下编写.cpp源文件

在src里建一个hello.cpp文件
思路:因为成员函数功能是输出一个字符串,需要IO库,因为是对hello.h的功能实现,所以要导入头文件,头文件放在静态库static里,需要从static中导入,
即:

#include
#include "static/hello.h"

int Hello::print(){
	std::cout<<"hello this is static library!"< 
在src下编写main.cpp文件 

在src里建一个main.cpp文件

main函数只是调用其他功能,走流程,
需要用到hello.h文件
导入到main.cpp
至于具体实现hello.cpp文件,main函数不用管它,直接通过头文件实例化对象,使用其功能,
即;

#include "static/hello.h"

int main(){
	Hello hi; //实例化对象Hello
	hi.print(); //调用对应成员函数,使用其功能
	return 0;
}
开始编译

在输入头文件和源文件后,输入指令tree .

此时只有这几个文件,分别为:编写好的CMakeLists.txt,头文件hello.h,cpp源文件hello.cpp和主函数main.cpp。这样共四个文件。

新建一个build文件夹,存放中间文件们,如cmakefiles文件,
cd进入build文件夹
输入cmake …

具体在ubuntu系统中输入为:

mkdir build
cd build
cmake ..

如下:

make

如下:

生成几个文件,
Scanning dependencies of target hello_library
[ 25%] Building CXX object CMakeFiles/hello_library.dir/src/hello.cpp.o
[ 50%] Linking CXX static library libhello_library.a
[ 50%] Built target hello_library
Scanning dependencies of target hello_binary
[ 75%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o
[100%] Linking CXX executable hello_binary
[100%] Built target hello_binary

先是生成一个静态库libhello_library.a
hello_libarary链接到静态库
生成项目hello_library

生成helli_binary
将hello_binary链接到hello_library
得到可执行文件hello_binary
ls看一下,有哪些文件,
输入:

./hello_binary

执行一下,正常输出

需要哪些东西?
项目名称,生成静态库,文件目录,target_link_library,生成可执行文件

对CMakeLists.txt做一点修改

修改是:将编译器修改成能在开发板上跑的源码,
即使用aarch64-linux-g++编译器去编译代码,
在CMakeLists.txt里面,
加入两行代码:
后面" "中的是编译器所在路径

set(CMAKE_C_COMPILER "/opt/host/bin/aarch64-linux-gcc")
set(CMAKE_CXX_COMPILER "/opt/host/bin/aarch64-linux-g++")

修改后为:

#指定cmake最小版本
cmake_minimum_required(VERSION 3.0.0)
#设置编译器为arm上能跑的aarch64-linux-g++,而不是默认的g++
set(CMAKE_C_COMPILER "/opt/host/bin/aarch64-linux-gcc")
set(CMAKE_CXX_COMPILER "/opt/host/bin/aarch64-linux-g++")
#设置项目名称
project(hello_library)
# #设置编译类型
add_executable(hello_binary src/main.cpp) #生成可执行文件
add_library(hello_library STATIC src/hello.cpp) #生成静态库
# add_library(common SHARED util.cpp) #生成共享库
# #指定编译时包含打源文件
# #1.穷举
# add_library(TSET TSET.cpp calculateSqrt.cpp util.cpp)
# #2.搜索所有的.cpp源文件,并存储炸一个变量中
# aux_source_directory(. SRC_LIST)
# add_library(TSET ${SRC_LIST})
# #3.自定义搜索规则
# file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
# add_library(TSET ${SRC_LIST})
# #查找指定的库文件
# find_library(log-lib)
# #设置包含的目录们
include_directories(hello_library
    PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)
# #设置链接库搜索目录
# link_directories(
#     ${CMAKE_CURRENT_SOURCE_DIR}/libs
# )
# #设置target需要链接的库
# target_link_libraries(
#     TSET
#     ${log-lib}
# )
# #1.指定链接动态库或静态库
# target_link_libraries(TSET ${libcommon.so})
target_link_libraries(hello_binary PRIVATE hello_library)
# #2.指定全路径
# target_link_libraries(TSET ${CMAKE_CURRENT_SOURCE_DIR}/libs/libcommon.so)
# target_link_libraries(TSET ${CMAKE_CURRENT_SOURCE_DIR}/libs/libcommon.a)
# #3.指定链接多个库
# target_link_libraries(TSET 
#         ${CMAKE_CURRENT_SOURCE_DIR}/libs/libcommon.a
#         boost_system.a
#         boost_thread
#         pthread
# )
# #设置变量
# #1.set直接设置变量的值
# set(SRC_LIST main.cpp test.cpp)
# add_executable(TSET ${SRC_LIST})
# #2.set追加变量的值
# set(SRC_LIST main.cpp)
# set(SRC_LIST ${SRC_LIST} test.cpp)
# add_executable(TSET ${SRC_LIST})
# #3.list追加或删除变量的值
# set(SRC_LIST main.cpp)
# list(APPEND SRC_LIST test.cpp)
# list(REMOVE SRC_LIST main.cpp)
# add_executable(TSET ${SRC_LIST})

删除之前创建的build文件夹中的所有文件,cd进入build文件夹,在build文件夹下输入指令:

rm -r ./*

然后输入

cmake ..


再输入:

make


得到编译好的文件hello_binary
在虚拟机上执行一下,报错,正常,因为这是在arm开发板上跑的文件格式,虚拟机是x86的,

接下来,将文件传到开发板上,(具体怎么用看:第四章 linux学习入门之开发板的使用)

输入指令:

adb push hello_binary /userdata

其中,hello_binary是编译好的文件名,/userdata是开发板上一个路径(编译好的文件可以存放在开发板任意位置)

在开发板输入./hello_library,运行正常。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号