一分鐘上手CMake & 如何構造Cmake專案

540天前 · 程式設計 · c++ · 670次阅读


在專案根目錄下建立檔案 CMakeLists.txt 並編輯:

# 專案名稱
project(Test)

# 添加可執行檔與需要編譯的翻譯單元
add_executable(Test main.cpp test.cpp ...) 

終端執行命令:

cmake . -B ./build 
# . 表示 CMakeLists.txt 所在的根目錄(目前目錄)
# -B 指定用於構建的資料夾
cmake --build ./build # 在資料夾./build中構建

這就完成了一個最小的Demo。

使用Package

# 指定 Package 的查找路徑
set(CMAKE_PREFIX_PATH "/to/path")

#查找包OpenSSL,並設爲必須
find_package(OpenSSL REQUIRED) 

# 鏈接程式庫
target_link_libraries(Test PUBLIC OpenSSL::SSL OpenSSL::Crypto)

設定C++標準

target_compile_features(Test PUBLIC cxx_std_20) # C++20

添加include目錄

target_include_directories(Test PUBLIC "/to/path")

變數與列表

# 設定變數
set(SRCFILES main.cpp test.cpp)

# 動態添加路徑
list(APPEND SRCFILES additional_file.cpp)

# 使用變數
add_executable(Test ${SRCFILES})

...

常用變數

${CMAKE_SOURCE_DIR} # CMakeLists.txt 所在目錄
${CMAKE_BINARY_DIR} # 構建目錄

常見FAQ

  • 設定了查找路徑卻查找不到包?

    • 如果發生該問題,可以嘗試同時設定包名稱(或加_DIR)變數與CMAKE_PREFIX_PATH路徑查找。
      如:查找Qt路徑
    set(CMAKE_PREFIX_PATH "/to/path/Qt6:/to/path")
    set(Qt6 "/to/path/Qt6") #列如下面查找Qt6,則設定變數名爲Qt6的路徑指向
    # or
    set(Qt6_DIR "/to/path/Qt6")
    find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)

    除此之外,你應當設定查找路徑爲包的程式庫安裝路徑,而不是包本身的根路徑。如:

    # 範例vcpkg
    # 你應該指向程式庫的安裝路徑 (installed/arm64-macos/) ,而不是包本身 (/to/path/vcpkg)
    set(CMAKE_PREFIX_PATH "/to/path/vcpkg/installed/arm64-macos/")
  • 需要注意,cmake會緩存build目錄,在某些情況下緩存可能會導致問題。你可以嘗試刪除目錄或CMakeCache.txt後重新配置或者使用以下命令清除緩存:

    cmake . -B ./build -U '*'
👍 0

c++ cmake

最后修改于94天前

评论

贴吧 狗头 原神 小黄脸
收起

贴吧

  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡

狗头

  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头

原神

  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神

小黄脸

  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸

目录

avatar

Hina

曇花一現

20

文章

96

评论

8

分类

初见

Modern C++ - Lambda

291天前

OwO

33

網站正在更新中...
站點正在更新功能與樣式,如有樣式錯誤,請嘗試刷新緩存