中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

php網(wǎng)站模板怎么用今日軍事新聞熱點(diǎn)事件

php網(wǎng)站模板怎么用,今日軍事新聞熱點(diǎn)事件,公司網(wǎng)站不備案嗎,微企業(yè)網(wǎng)站模板免費(fèi)目錄 五、scope 作用域5.1 作用域的類型5.1.1 全局作用域5.1.2 目錄作用域5.1.3 函數(shù)作用域 六、宏6.1 基本語(yǔ)法6.2 演示代碼 七、CMake構(gòu)建項(xiàng)目7.1 全局變量7.2 寫(xiě)入源碼路徑7.3 調(diào)用子目錄cmake腳本7.4 CMakeLists 嵌套(最常用) 八、CMake 與庫(kù)8.1 CMake生成動(dòng)靜態(tài)庫(kù)8.1.1 動(dòng)…

目錄

  • 五、scope 作用域
    • 5.1 作用域的類型
      • 5.1.1 全局作用域
      • 5.1.2 目錄作用域
      • 5.1.3 函數(shù)作用域
  • 六、宏
    • 6.1 基本語(yǔ)法
    • 6.2 演示代碼
  • 七、CMake構(gòu)建項(xiàng)目
    • 7.1 全局變量
    • 7.2 寫(xiě)入源碼路徑
    • 7.3 調(diào)用子目錄cmake腳本
    • 7.4 CMakeLists 嵌套(最常用)
  • 八、CMake 與庫(kù)
    • 8.1 CMake生成動(dòng)靜態(tài)庫(kù)
      • 8.1.1 動(dòng)靜態(tài)庫(kù)
      • 8.1.2 常見(jiàn)命令
      • 8.1.3 生成靜態(tài)庫(kù)
        • 8.1.3.1 示例
        • 8.1.3.2 總結(jié)
      • 8.1.4 生成動(dòng)態(tài)庫(kù)
    • 8.2 CMake調(diào)用動(dòng)靜態(tài)庫(kù)
    • 8.2.1 靜態(tài)庫(kù)調(diào)用流程:
    • 8.2.2 動(dòng)態(tài)庫(kù)調(diào)用流程:

五、scope 作用域

5.1 作用域的類型

5.1.1 全局作用域

  • 從CMake腳本開(kāi)始運(yùn)行到結(jié)束。
  • 所有CMakeLists.txt文件共享全局作用域
  • 通過(guò)set()定義的變量默認(rèn)是全局變量(除非明確在函數(shù)或宏中設(shè)置為局部變量)
set(GLOBAL_VAR "I am global")
message(${GLOBAL_VAR}) # 輸出: I am global

5.1.2 目錄作用域

  • 每個(gè)目錄中的CMakeLists.txt文件有獨(dú)立的作用域
  • 子目錄可以繼承父目錄的變量,但子目錄中對(duì)變量的更改不會(huì)影響父目錄,只在子目錄下生效
    下面是一個(gè)demo,理解即可,暫時(shí)不嘗試自己編譯:
# 頂層 CMakeLists.txt
set(DIR_VAR "Parent Directory")
# 添加子目錄
add_subdirectory(subdir)
# 子目錄 subdir/CMakeLists.txt
message(${DIR_VAR}) # 輸出: Parent Directory
set(DIR_VAR "Child Directory")

子目錄進(jìn)行set操作后,頂層的 DIR_VAR 不會(huì)被子目錄的更改影響。

5.1.3 函數(shù)作用域

  • 在函數(shù)中定義的變量是局部變量,只在函數(shù)內(nèi)有效
  • 使用set()定義變量時(shí),作用域局限于當(dāng)前函數(shù),除非指定PARENT_SCOPE
function(set_local_var)set(LOCAL_VAR "Local Scope")message(${LOCAL_VAR}) # 輸出: Local Scope
endfunction()set_local_var()
message(${LOCAL_VAR}) # 輸出: (空,因?yàn)槌龊瘮?shù)作用域)

六、宏

6.1 基本語(yǔ)法

macro(<name> [arg1 [arg2 ...]])# 宏體
endmacro()
  • <name> 是宏的名稱。
  • [arg1, arg2…] 是參數(shù)列表(可選)。
  • 宏沒(méi)有返回值,但可以通過(guò)變量或 CACHE 修改全局狀態(tài)。

6.2 演示代碼

cmake_minimum_required(VERSION 3.20.0)macro(Test myVar)set(myVar "new value")message ("2. argument: ${myVar}")
endmacro()set(myVar "First value")
message ("1. myVar: ${myVar}")
Test("value")
message("3. myVar: ${myVar}")

在這里插入圖片描述
在這里插入圖片描述

七、CMake構(gòu)建項(xiàng)目

7.1 全局變量

在[[#1.2 初體驗(yàn)]]中,我們使用了以下代碼:

project(hello CXX)
  • 聲明項(xiàng)目名稱為 hello,并設(shè)置主要語(yǔ)言為 C++(CXX)。
  • 生成項(xiàng)目相關(guān)的全局變量,例如:
    • ${PROJECT_NAME}:值為 hello
    • ${PROJECT_SOURCE_DIR}:項(xiàng)目的根目錄路徑。
    • ${PROJECT_BINARY_DIR}:構(gòu)建目錄路徑。

7.2 寫(xiě)入源碼路徑

特點(diǎn)

  • 最簡(jiǎn)單的構(gòu)建方式。
  • 適用于只有一個(gè) CMakeLists.txt 文件的小型項(xiàng)目。
    目錄結(jié)構(gòu)
MyProject/
├── CMakeLists.txt
├── main.cpp
├──Transportation├──train.h├──tarin.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 3.20.0)project(MyProject CXX)
add_executable(MyProject main.cpp 需要鏈接的文件路徑)
  • CXX 表示語(yǔ)言是 cpp
  • 在原文件中,要寫(xiě)對(duì)應(yīng)的.h文件,main.cpp:#include "Transportation/train.h",在這里就不需要再包含,但是要包含.cpp文件的路徑
    構(gòu)建方法
cmake -B build
cmake --build build
build/項(xiàng)目名稱

![[IMG-20241212140631676.png]]

7.3 調(diào)用子目錄cmake腳本

  • include方法可以引入子目錄中的cmake后綴的配置文件
  • 將配置加入 add_executable
    目錄結(jié)構(gòu):
.
├── CMakeLists.txt
├── main.cpp
└── Transportation├── car.cpp├── car.h├── train.cpp├── train.h└── transportation.cmake

transportation.cmake使用set將變量設(shè)置成需要鏈接的文件:

set(trans_sources Transportation/car.cpp Transportation/train.cpp)

然后在CMakeLists.txt中就可以直接使用該變量:

cmake_minimum_required(VERSION 3.20.0)
project(MyProject CXX)
include(Transportation/transportation.cmake)
add_executable(MyProject main.cpp ${trans_sources})

??注意:要使用include引入子目錄下的cmake文件,使用變量要用${}
構(gòu)建方法同上。

7.4 CMakeLists 嵌套(最常用)

  • target_include_directories 頭文件目錄的聲明
  • target_link_libraries 連接庫(kù)文件
  • add_subdirectory 添加子目錄
  • add_ library 生成庫(kù)文件(默認(rèn)靜態(tài)庫(kù))
    目錄結(jié)構(gòu):
.
├── CMakeLists.txt
├── main.cpp
└── Transportation├── car.cpp├── car.h├── CMakeLists.txt├── train.cpp└── train.h

在子目錄的CMakeLists.txt中,add_library 命令創(chuàng)建一個(gè)名為 Translib 的庫(kù),該庫(kù)包含 train.cpp 和 car.cpp 兩個(gè)源文件的編譯結(jié)果。

add_library(Translib train.cpp car.cpp)

在父目錄的CMakeLists.txt中,

cmake_minimum_required(VERSION 3.20.0)
project(MyProject CXX)add_subdirectory(Transportation)add_executable(MyApp main.cpp)target_link_libraries(MyApp PUBLIC Translib)target_include_directories(MyApp PUBLIC "${PROJECT_SOURCE_DIR}/Transportation")
  1. 定義項(xiàng)目
  • project(MyProject CXX) 聲明項(xiàng)目的名稱為 MyProject,并設(shè)置其主要語(yǔ)言為 C++。
  1. 添加子目錄
  • add_subdirectory(Transportation) 將 Transportation 子目錄的構(gòu)建邏輯納入父目錄中。
  • 這會(huì)遞歸執(zhí)行 Transportation 目錄中的 CMakeLists.txt,構(gòu)建 Translib 庫(kù)。
  1. 添加可執(zhí)行文件
  • add_executable(MyApp main.cpp) 聲明一個(gè)名為 MyApp 的可執(zhí)行目標(biāo),其源文件為 main.cpp。
  1. 鏈接庫(kù)
  • target_link_libraries(MyApp PUBLIC Translib) 將 Translib 庫(kù)鏈接到可執(zhí)行文件 MyApp。
  • PUBLIC:表示 Translib 的頭文件路徑和鏈接庫(kù)信息都對(duì) MyProject 和其使用者可見(jiàn)。
  1. 包含頭文件路徑
  • target_include_directories(MyApp PUBLIC "${PROJECT_SOURCE_DIR}/Transportation") 明確告訴 CMake,MyProject 需要包含 Transportation 目錄中的頭文件(如 car.h 和 train.h),這樣在main.cpp中包含頭文件時(shí)就不需要再次包含路徑。
    構(gòu)建順序總結(jié)
  1. 進(jìn)入父目錄的構(gòu)建流程
  • cmake 檢測(cè)到 add_subdirectory(Transportation),遞歸構(gòu)建子目錄。
  • 子目錄生成 Translib 庫(kù)。
  1. 構(gòu)建父目錄目標(biāo)
  • 構(gòu)建 main.cpp 并將其鏈接到已生成的 Translib。

八、CMake 與庫(kù)

8.1 CMake生成動(dòng)靜態(tài)庫(kù)

8.1.1 動(dòng)靜態(tài)庫(kù)

靜態(tài)庫(kù)
常見(jiàn)命名:.a(Linux/Unix),.lib(Windows)。

在鏈接階段,將匯編生成的目標(biāo)文件.o與引用到的庫(kù)一起鏈接打包到可執(zhí)行文件中。
對(duì)函數(shù)庫(kù)的鏈接是編譯器的鏈接器在編譯階段完成靜態(tài)鏈接的過(guò)程

動(dòng)態(tài)庫(kù)
常見(jiàn)命名:.so(Linux/Unix),.dll(Windows),.dylib(macOS

動(dòng)態(tài)庫(kù)是在程序運(yùn)行時(shí)才會(huì)被載入到內(nèi)存,當(dāng)執(zhí)行到庫(kù)中代碼時(shí)就會(huì)跳轉(zhuǎn)到目標(biāo)庫(kù)。
動(dòng)態(tài)庫(kù)需要依賴操作系統(tǒng)的動(dòng)態(tài)鏈接機(jī)制

8.1.2 常見(jiàn)命令

  • file(GLOB ...) 常用于搜索源文件
  • add_library(animal STATIC ${SRC}) 生成靜態(tài)庫(kù)
  • add_library(animal SHARED ${SRC}) 生成動(dòng)態(tài)庫(kù)
  • ${LIBRARY_OUTER_PATH} 導(dǎo)出目錄

8.1.3 生成靜態(tài)庫(kù)

8.1.3.1 示例

當(dāng)前目錄結(jié)構(gòu)如下:

.
├── CMakeLists.txt
├── include
│   ├── car.h
│   └── train.h
└── src├── car.cpp└── train.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.20.0)
project(MyProject CXX)file(GLOB SRC &${PROJECT_SOURCE_DIR}/src/*.cpp)
include_directories(${PROJECT_SOURCE_DIR}/include) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/a)
add_library(trans STATIC ${SRC})

下面來(lái)解釋一下上面的代碼:

project(MyProject CXX)

在[[#7.1 全局變量]]中,我們了解到使用project時(shí),除聲明項(xiàng)目名稱外,還會(huì)生成項(xiàng)目相關(guān)的全局變量,例如:

  • ${PROJECT_NAME}:值為 MyProject。
  • ${PROJECT_SOURCE_DIR}:項(xiàng)目的根目錄路徑。
  • ${PROJECT_BINARY_DIR}:構(gòu)建目錄路徑。

file(GLOB SRC ${PROJECT_SOURCE_DIR}/src/*.cpp)

作用

  • 使用 file(GLOB ...) 命令,搜索 src 目錄下所有以 .cpp 結(jié)尾的文件,并將它們的路徑存入變量 SRC。
  • GLOB 是 CMake 提供的文件搜索命令,用于匹配文件路徑。
  • 示例:如果 src 目錄下有 car.cpp 和 train.cpp,那么 SRC 的值將是:
/path/to/src/car.cpp
/path/to/src/train.cpp

include_directories(${PROJECT_SOURCE_DIR}/include) 

作用

  • 將 include 目錄(即 car.h 和 train.h 所在目錄)添加到項(xiàng)目的頭文件搜索路徑中。
  • 等效于將 -I/path/to/include 傳遞給編譯器。
  • 這樣,源文件中可以直接使用,而無(wú)需寫(xiě)完整路徑:
#include "car.h"
#include "train.h"

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/a)

作用

  • 指定生成的庫(kù)文件的輸出目錄為項(xiàng)目根目錄下的 a 子目錄。
  • 如果沒(méi)有這一行,CMake 默認(rèn)將庫(kù)文件輸出到構(gòu)建目錄中。

add_library(trans STATIC ${SRC})

作用

  • 定義一個(gè)名為 trans 的靜態(tài)庫(kù)(STATIC)。
  • SRC 中列出的源文件(如 car.cpp 和 train.cpp)將被編譯,并打包成靜態(tài)庫(kù)。
8.1.3.2 總結(jié)

生成靜態(tài)庫(kù)的基本步驟:

# 1. 設(shè)置 CMake 最低版本
cmake_minimum_required(VERSION 3.20)
# 2. 定義項(xiàng)目名稱和語(yǔ)言
project(MyStaticLibrary LANGUAGES CXX)# 3. 添加頭文件路徑
include_directories(${PROJECT_SOURCE_DIR}/include)
# 4. 查找源文件
file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp)# 5. 設(shè)置庫(kù)文件的輸出路徑
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/a)# 6. 添加靜態(tài)庫(kù) 聲明一個(gè)靜態(tài)庫(kù)目標(biāo)(STATIC 表示靜態(tài)庫(kù)),指定構(gòu)成靜態(tài)庫(kù)的源文件。
add_library(MyStaticLib STATIC ${SRC_FILES})

8.1.4 生成動(dòng)態(tài)庫(kù)

生成動(dòng)態(tài)庫(kù)與生成靜態(tài)庫(kù)的步驟類似,只需要將添加靜態(tài)庫(kù)的STATIC改為SHARED(動(dòng)態(tài)庫(kù)也叫共享庫(kù))

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/so)
add_library(trans SHARED ${SRC})

8.2 CMake調(diào)用動(dòng)靜態(tài)庫(kù)

8.2.1 靜態(tài)庫(kù)調(diào)用流程:

  1. 指定靜態(tài)庫(kù)的路徑
  2. 添加可執(zhí)行文件
  3. 鏈接靜態(tài)庫(kù)
  4. 添加庫(kù)的頭文件路徑
    假設(shè)當(dāng)前目錄如下:
flash@VM-12-10-ubuntu:~/2024/12/14_cmake/useLib$ tree -L 2
.
├── CMakeLists.txt
├── include
│   ├── car.h
│   └── train.h
├── Lib
│   ├── libtrans.a
│   └── libtrans.so
└── main.cpp

如果已經(jīng)生成了動(dòng)靜態(tài)庫(kù),可以直接刪除src目錄,但是建議保留include目錄,下面來(lái)看CMakeLists.txt的具體編寫(xiě):

cmake_minimum_required(VERSION 3.20.0)
project(MyProject CXX)# 指定靜態(tài)庫(kù)的路徑
set(STATIC_LIB_PATH ${PROJECT_SOURCE_DIR}/Lib/libtrans.a)
# 添加可執(zhí)行文件
add_executable(MyExecutable main.cpp)
# 鏈接靜態(tài)庫(kù)(僅作用于 MyExecutable)
target_link_libraries(MyExecutable PRIVATE ${STATIC_LIB_PATH})
# 添加庫(kù)的頭文件路徑(僅作用于 MyExecutable)
target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)

8.2.2 動(dòng)態(tài)庫(kù)調(diào)用流程:

  1. 指定動(dòng)態(tài)庫(kù)的路徑
  2. 添加可執(zhí)行文件
  3. 鏈接靜態(tài)庫(kù)
  4. 添加庫(kù)的頭文件路徑
cmake_minimum_required(VERSION 3.20.0)
project(MyProject CXX)# 指定動(dòng)態(tài)庫(kù)的路徑
set(DYNAMIC_LIB_PATH ${PROJECT_SOURCE_DIR}/Lib/libtrans.so)
# 添加可執(zhí)行文件
add_executable(MyExecutable main.cpp)
# 鏈接動(dòng)態(tài)庫(kù)(僅作用于 MyExecutable)
target_link_libraries(MyExecutable PRIVATE ${DYNAMIC_LIB_PATH})
# 添加庫(kù)的頭文件路徑(僅作用于 MyExecutable)
target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)
http://www.risenshineclean.com/news/51847.html

相關(guān)文章:

  • 無(wú)錫夢(mèng)燕服飾網(wǎng)站誰(shuí)做的汕頭網(wǎng)站推廣
  • 合肥網(wǎng)站推廣優(yōu)化怎樣能在百度上搜索到自己的店鋪
  • 產(chǎn)品展示型網(wǎng)站有哪些steam交易鏈接在哪看
  • 網(wǎng)站開(kāi)發(fā)好做嗎阿里云網(wǎng)站搭建
  • 做網(wǎng)站 需要買(mǎi)云服務(wù)器嗎sem是什么意思啊
  • 汽車精品設(shè)計(jì)網(wǎng)站建設(shè)搜狗整站優(yōu)化
  • 做二手衣服的網(wǎng)站有哪些免費(fèi)下優(yōu)化大師
  • 網(wǎng)站建設(shè)的銷售怎么做百度seo引流怎么做
  • 301wordpressseo云優(yōu)化如何
  • 三合一模板網(wǎng)站百度網(wǎng)站收錄
  • 網(wǎng)站描述代碼疫情最新官方消息
  • 網(wǎng)站開(kāi)發(fā)工具發(fā)展史營(yíng)銷方案包括哪些內(nèi)容
  • 怎么運(yùn)營(yíng)自己的網(wǎng)站十大免費(fèi)網(wǎng)站推廣入口
  • 做電影網(wǎng)站賺錢(qián)的方法網(wǎng)絡(luò)優(yōu)化工程師是做什么的
  • 珠海網(wǎng)站運(yùn)營(yíng)軟件工程培訓(xùn)機(jī)構(gòu)哪家好
  • ps企業(yè)站網(wǎng)站做多大的商業(yè)軟文案例
  • 國(guó)內(nèi)wordpress主題網(wǎng)站下載愛(ài)城市網(wǎng)app官方網(wǎng)站
  • 網(wǎng)站建設(shè)福州最好企業(yè)網(wǎng)絡(luò)營(yíng)銷系統(tǒng)分析報(bào)告
  • 上海網(wǎng)站排名優(yōu)化價(jià)格廣州百度快速排名優(yōu)化
  • 手機(jī)網(wǎng)站制作 尺寸推廣賺錢(qián)的平臺(tái)
  • 2017wordpress整站源碼長(zhǎng)沙網(wǎng)站定制公司
  • 網(wǎng)站編輯怎么做灰色關(guān)鍵詞排名代發(fā)
  • 網(wǎng)站 導(dǎo)航條廣州網(wǎng)站優(yōu)化多少錢(qián)
  • 上海做網(wǎng)站公司長(zhǎng)沙百度搜索網(wǎng)站排名
  • 網(wǎng)站制作推廣方案整合營(yíng)銷經(jīng)典案例
  • 網(wǎng)站建設(shè)發(fā)展佛山百度seo代理
  • 公司做兩個(gè)網(wǎng)站有影響嗎黃頁(yè)
  • wordpress表白主題襄陽(yáng)seo
  • 武漢網(wǎng)站建站今日頭條極速版官網(wǎng)
  • 天津seo網(wǎng)站設(shè)計(jì)torrentkitty磁力搜索引擎