个人资料
归档
正文

cmake-docker

(2023-04-16 08:00:18) 下一个

1.Cmake

编辑CMakeLists.txt并运行以生成Makefile。
Cmake教程:https://blog.csdn.net/weixin_43717839/article/details/128032486    
https://zhuanlan.zhihu.com/p/534439206   
2020年第3本书:《CMake实践》 - 知乎 (zhihu.com)
CMake 与 Make:有什么区别? - 地球博客 (earthly-dev.translate.goog)

1.1 区别

gcc是GNU Compiler Collection,也称为GNU编译器套件,可以理解为编译器,它可以编译很多种语言:C/C++、FORTRAN、JAVA、OBJC、ADA等。假如我有一个源文件(比如.c文件),我就可以用gcc命令来编译它。

clang也一样,Clang是一个C语言C++Objective-C、Objective-C++语言的轻量级编译器源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。clang比gcc编译速度更快一些,而且错误提示更人性化。

我们平常用的VC++、Visual Studio、Clion这种大型IDE,里面使用的编译器就是gcc或clang。但是我们通常在使用的时候也就只需要按一个按钮就可以实现对包含多个原文件的程序的编译,这是如果进行的呢?IDE里面已经帮你做了你需要做的一些了。

cmake可以方便地生成makefile文件给make用,可以跨平台生成对应平台能用的makefile。它根据用户编写的CMakeLists.txt去生成makefile。

下面是一个CMakeLists.txt文件:
cmake_minimum_required (VERSION 2.8)
project (Demo3)
aux_source_directory(. DIR_SRCS)
add_subdirectory(math)
add_executable(Demo main.cc)
target_link_libraries(Demo MathFunctions)

该文件用 add_subdirectory 指明本项目包含一个子目录 math,其下的 CMakeLists.txt 文件和源代码也会被处理 ;并用 target_link_libraries 指明需要连接MathFunctions库 ,后者正是由子目录中的 CMakeLists.txt定义:

aux_source_directory(. DIR_LIB_SRCS)   #当前目录下所有源文件保存为DIR_LIB_SRCS
add_library (MathFunctions ${DIR_LIB_SRCS}) #生成链接库

如果你用IDE,CLion常能自动生成。IDEE可能会出现某些错误,这个时候就需要你自己去修改相关文件了。

SCons:Eric S. Raymond、Timothee Besset、Zed A. Shaw 等大神力荐的项目架构工具,与 CMake 的最大区别是使用 Python 作为执行脚本。

1.2 Ninja 忍者
Ninja 是一个注重速度的小型编译系统。 它在两个主要方面与其他系统不同:它的设计目的是让更高级别的编译系统生成其输入文件,并且它的设计目的是尽可能快地运行。其它编译器都是高级语言,而 Ninja 的目标是成为汇编程序。Ninja 构建文件是人类可读的,但手写不是特别方便。这些受限构建文件允许 Ninja 快速评估增量构建。

Ninja 的低级方法使其非常适合嵌入到功能更强大的构建系统中; 查看现有工具的列表。 Ninja 用于构建 Google Chrome、Android 的一部分、LLVM,并且由于 CMake 的 Ninja 后端,可以在许多其他项目中使用。

最近一个 Ninja 版本是 v1.11.1,于 2022 年 8 月 30 日发布。您可以下载 Ninja 二进制文件或在系统的包管理器中找到它。或者,从源代码构建:
$ git clone git://github.com/ninja-build/ninja.git && cd ninja
$ git checkout release
$ cat README.md

2. Docker

入门:https://blog.csdn.net/q610376681/article/details/90483576? 

2.1.应用实例

我实际用的运行命令:

sudo docker import docker_openocd_export.tar.gz docker_openocd:v3.31
sudo docker run -it --rm -p 3333:3333 -p 4444:4444 --device=/dev/bus/usb/001/012 docker_openocd:v3.31 bash

sudo docker ps -a            #list container
sudo docker container ls      #list container
sudo docker rm -f cb89bf3a9895 #remove the running container
sudo docker images ls          #list image
sudo docker rmi -f cb89bf3a9895 #remove image
sudo docker exec -it cb89bf3a9895 bash #general way to run an image, but ocd needs rmi and rerun

2.2.封装python实例

Linux https://www.youtube.com/watch?v=0UG2x2iWerk&t=192s 

Windows: https://www.youtube.com/watch?v=0TFWtfFY87U 

Dockerize Python Applications with GUI:https://www.youtube.com/watch?v=W82jvmiaDtk 

在exmaple1目录下有main.py,引用了request和beautifulsoup4库,需创建Dockerfile:

FROM python:3.9
ADD main.py
RUN pip install request beautifulsoup4
CMD ["python",""./main.py]
 
然后下列命令生成Image,后者包括docker container(含OS,应用程序和相关库):
cd example1
docker -v
docker build -t python-imdb #-t outputImage
docker run ./python-imdb

python -m pip freeze > requirements.txt

pip install -r requirements.txt

[ 打印 ]
阅读 ()评论 (0)
评论
目前还没有任何评论
登录后才可评论.