個人資料
歸檔
正文

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)
評論
目前還沒有任何評論
登錄後才可評論.