男人的天堂AV亚洲一区2区|精品乱码久久久久久久一|国产成人综合久久精品推不卡|99国产精品99久久|国产精品亚洲v三区防屏蔽|a级黄色大片在线观看视频男男|在线播放视频国产区中文|国产三级激情在线视频

JNH官网

【ARM】Ubuntu系統下如何自動生成工程各目錄下的Makefile文件

一、文檔背景

在Linux系統下開發一個較大型的項目時,涉及到許多目錄與文件,如果每個目錄下的Makefile都手動去編寫,效率會非常低,同時,也容易出錯。

自動生成 Makefile 文件可以簡化項目的構建過程,提高開發效率,并增加項目的可維護性。


二、 解決的問題或者進行問題分析

Makefile 文件的自動生成通常是通過使用構建工具或生成工具來實現的。有幾個工具可以幫助自動生成 Makefile 文件,其中一些常見的包括:

● CMake: CMake 是一個跨平臺的構建系統生成工具,它可以自動生成針對不同構建系統(包括 Makefile)的配置文件。通過編寫 CMakeLists.txt 文件,你可以使用 CMake 生成相應的 Makefile,并用于構建你的項目。

● Autotools: Autotools 是一套用于自動化軟件構建、配置和安裝的工具集。它包括 Autoconf、Automake 和 Libtool。Autoconf 可以根據 configure.ac 文件生成 configure 腳本,而 Automake 可以根據 Makefile.am 文件生成 Makefile。

● qmake: qmake 是 Qt 庫附帶的一個構建系統生成工具。通過編寫 .pro 文件,你可以使用 qmake 自動生成適用于不同平臺的 Makefile 文件。

● GNU Automake: GNU Automake 是 Autoconf 的一部分,它用于生成 Makefile.in 文件,從而使 Autoconf 自動生成最終的 Makefile。

本文將通過CMake工具來實現Makefile文件的自動生成。


三、 如何應用CMake來自動生成Makefile文件

實例工程的目錄與文件情況如圖3-1所示:

圖3-1

1. 在“math”目錄下,創建一個CMakeLists.txt文件,內容如圖3-2所示:

圖3-2

2. 在“mathlib”目錄下,創建一個CMakeLists.txt文件,內容如圖3-3所示:

圖3-3

3. 在“Add”目錄下,創建一個CMakeLists.txt文件,內容如圖3-4所示:

圖3-4

4. 在“Sub、Mul、Div”目錄下,參照“Add”目錄的CMakeLists.txt文件創建類似的CMakeLists.txt文件。

5. 在“math”目錄下,運行“cmake -S . -B build”,開始生成Makefile文件,如圖3-5所示:

圖3-5

6. 進入“build”目錄下,可以看到Makefile文件已生成,同時也創建工程的目錄鏡象,相應的目錄下都生成了Makefile文件,如圖3-6所示:

圖3-6


四、驗證自動生成的Makefile的正確性

進入在“build”目錄下,運行make,并運行執行文件:main,如圖4-1所示:

圖4-1

五、討論分析

1. CMakeLists.txt的基本結構是什么?

# Set the minimum required version of CMake

cmake_minimum_required(VERSION 3.10)


# Define the project name

project(MyProject)


# Add build rules for an executable or library

add_executable(my_executable main.cpp)


# Set the source file directory

add_subdirectory(src)


# Set the library file directory

add_subdirectory(lib)


# Add linking libraries

target_link_libraries(my_executable my_library)


# Add include directories

target_include_directories(my_executable PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)


上述代碼包含了以下主要元素:

● cmake_minimum_required: 設置 CMake 的最低版本要求。

● project: 定義項目名稱。

● add_executable 或 add_library: 添加可執行文件或庫的構建規則。

● add_subdirectory: 設置源文件目錄或子項目的構建規則。

● target_link_libraries: 添加鏈接庫的規則。

● target_include_directories: 添加包含目錄的規則。


2. cmake,Bazel及buck等構建工具的差異?

CMake:


特點:

● 語言支持: CMake 是一種構建工具和構建系統生成工具,支持多種編程語言,包括 C++、C、Java、Python 等。

● 平臺支持: CMake 是跨平臺的,可以生成針對不同平臺(Windows、Linux、macOS 等)的構建系統。

● 生成器: CMake 支持生成多種構建系統,如 Makefile、Ninja、Visual Studio 等。

● 易學易用: CMake 的語法相對簡單,易于學習和使用。

● 社區支持: 有廣泛的社區支持和文檔資源。

Bazel:(google)

特點:

● 多語言支持: Bazel 支持多種編程語言,包括 C++, Java, Python, Go, JavaScript。

● 高度可重現: 通過準確的依賴分析和緩存機制,Bazel 確保構建是可重現的,即使在分布式環境中也能保持一致。

● 多平臺支持: 能夠構建適用于多個平臺的軟件,包括 Linux、macOS、Windows 等。

● 分布式構建: 支持將構建任務分發到多臺計算機上,以加速構建過程。

● 增量構建: 只重新構建發生變化的部分,提高構建效率。

● 支持多倉庫: 能夠處理大規模代碼庫,支持多倉庫構建。

Buck:


特點:

● Android/iOS 構建: Buck 最初是為 Facebook 的 Android 和 iOS 項目開發的,因此在處理移動應用構建方面非常強大。

● 增量構建: 與 Bazel 一樣,Buck 也支持增量構建,只重新構建發生變化的部分。

● 可配置性: 提供靈活的配置選項,允許開發者根據項目需求進行定制。

● 并行構建: 能夠并行構建項目,提高構建效率。

● 緩存機制: 使用緩存來存儲中間和最終構建產物,以減少不必要的重新構建。

共同點:

● 都支持分布式構建,可以將構建任務分發到多個機器上。

● 都注重構建速度和可重現性。

● 都采用聲明式的構建規則,使用 BUILD 文件來描述構建過程。

六、結論

應用CMake工具自動生成 Makefile 文件可以簡化項目的構建過程,大大提高了項目的開發效率。

jnh官網 jnh官網 jnh官網 jnh官網 金年會 金年會 金年會 金年會