日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cmake的CMakeLists.txt写法示例

發(fā)布時(shí)間:2024/4/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cmake的CMakeLists.txt写法示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Cmake的CMakeLists.txt寫法示例

目錄

  • 示例一:單文件
  • 示例二:多個(gè)源文件
  • 示例三:將hello.c生成一個(gè)庫來調(diào)用
  • 示例四:工程分類文件夾編譯
  • 示例五:Cmake的install使用

  • 示例一:單文件

  • 文件名字為main.cpp,內(nèi)容如下:
  • #include <iostream>int main() {printf("Hello World!\n");return 0; }
  • CMakeLists.txt文件內(nèi)容如下,其中:
    a. cmake_minimum_required:對(duì)cmake的最低(高)版本的要求。
    b. project:cmake工程的名稱,不是強(qiáng)制性的,最好加上。
    c. set:用來定義變量。
    d. add_executable:使用指定的源文件來生成目標(biāo)可執(zhí)行文件。
    e. message:輸出顯示信息。
  • cmake_minimum_required(VERSION 3.21) project(cmake-demo)set(CMAKE_CXX_STANDARD 14)add_executable(${PROJECT_NAME} main.cpp)message(${PROJECT_NAME})
  • CMakeList.txt 文件中,命令名字是不區(qū)分大小寫的,而參數(shù)和變量是大小寫相關(guān)的。
  • 編譯時(shí)在當(dāng)前目錄新建一個(gè)build目錄,進(jìn)行build目錄執(zhí)行:cmake …/ ,產(chǎn)生的臨時(shí)文件就會(huì)在build目錄下,不影響源碼目錄代碼。
  • 最后在此目錄執(zhí)行make命令生成相應(yīng)的可執(zhí)行程序。
    a. 注:clion中點(diǎn)擊執(zhí)行可自動(dòng)生成在cmake-build-debug目錄中。

  • 示例二:多個(gè)源文件

  • hello.h頭文件內(nèi)容如下:
    void hello(const char* name);
  • hello.cpp文件內(nèi)容:
  • #include <stdio.h> #include "hello.h"void hello(const char* name) {printf("Hello my name is %s\n",name); }
  • main.c文件內(nèi)容如下:
  • #include <iostream> #include "hello.h"int main() {printf("Hello World!\n");hello("hello");return 0; }
  • CMakeLists.txt文件:
  • cmake_minimum_required(VERSION 3.21) project(cmake-demo)set(CMAKE_CXX_STANDARD 14) set(SRC_LIST main.cpp hello.cpp hello.h)add_executable(${PROJECT_NAME} ${SRC_LIST})message(${PROJECT_NAME})

    示例三:將hello.c生成一個(gè)庫來調(diào)用

  • 如果將hello生成成一個(gè)庫來調(diào)用的話只需要在事例二的基礎(chǔ)上修改一下CMakeLists.txt文件再進(jìn)行編譯。
  • 修改的CMakeLists.txt如下:
    a. add_library:指定的源文件生成鏈接文件添加到工程中。
    b. target_link_libraries:將目標(biāo)文件與庫文件進(jìn)行鏈接。
  • cmake_minimum_required(VERSION 3.21) project(cmake-demo)set(CMAKE_CXX_STANDARD 14) set(LIB_SRC hello.cpp) set(SRC_LIST main.cpp)add_library(hello ${LIB_SRC})add_executable(${PROJECT_NAME} ${SRC_LIST})target_link_libraries(${PROJECT_NAME} hello)message(${PROJECT_NAME})
  • 與事例二相比,添加了一個(gè)新的目標(biāo)hello庫,并將其鏈接到我們的cmake-demo程序。
  • 然后用同樣的方法進(jìn)行cmake和make進(jìn)行編譯。

  • 示例四:工程分類文件夾編譯

  • 如果代碼量比較大,會(huì)將代碼分開放置,進(jìn)行分類,形成分成多個(gè)文件夾。

  • 比如main.cpp程序放在app目錄下面,hello.cpp和hello.h放在libso文件夾下面。
    a. 當(dāng)前文件夾有一個(gè)CMakeLists.txt文件,app和libso文件夾下面也有CMakeLists.txt文件。

  • 首先看app文件夾的CMakeLists.txt。

  • project(cmake-demo)include_directories(${PROJECT_SOURCE_DIR}/../../libso)set(SRC_LIST main.cpp) add_executable(${PROJECT_NAME} ${SRC_LIST}) target_link_libraries(${PROJECT_NAME} helloso)message(${PROJECT_NAME})
  • 然后看libso文件夾的CMakeLists.txt,其中SHARED表示是生成的動(dòng)態(tài)庫,如果把SHARED去掉的話就是生成靜態(tài)庫。
  • project(helloso)set(LIB_SRC hello.cpp) add_library(${PROJECT_NAME} SHARED ${LIB_SRC})
  • 最外面文件夾的CMakeLists.txt:
  • cmake_minimum_required(VERSION 3.21) project(cmake)add_subdirectory(./app) add_subdirectory(./libso)

  • 最后到build目錄下執(zhí)行 cmake …/ 和 make 進(jìn)行編譯。生成目錄如下:
    a. 注:clion中點(diǎn)擊執(zhí)行可自動(dòng)生成在cmake-build-debug目錄中。

  • 示例五:Cmake的install使用

  • cmake中install是將編譯好的可執(zhí)行文件或者生成的庫文件放到系統(tǒng)對(duì)應(yīng)的位置,比如說可執(zhí)行文件直接要放到bin目錄下面,so庫文件要放到對(duì)應(yīng)的lib目錄下面。
  • 修改上面例子的CMakeLists.txt文件,編輯完成后編譯多了install步驟,這樣可以在Linux上面使用該執(zhí)行文件,執(zhí)行文件會(huì)調(diào)用so庫。即執(zhí)行命令為:
  • cmake ../ make make install
  • app目錄修改的CMakeLists.txt在最后一行加上install:
  • project(cmake-demo)include_directories(${PROJECT_SOURCE_DIR}/../../libso)set(SRC_LIST main.cpp) add_executable(${PROJECT_NAME} ${SRC_LIST}) target_link_libraries(${PROJECT_NAME} helloso)message(${PROJECT_NAME})install(TARGETS ${PROJECT_NAME} DESTINATION bin)
  • libso目錄修改的CMakeLists.txt在最后一行加上install:
  • project(helloso)set(LIB_SRC hello.cpp) add_library(${PROJECT_NAME} SHARED ${LIB_SRC})install(TARGETS ${PROJECT_NAME} DESTINATION ../lib)
  • 解釋:
    a. install(TARGETS ${PROJECT_NAME} DESTINATION bin):安裝cmake-demo可執(zhí)行文件到${CMAKE_INSTALL_PREFIX}/bin目錄。
    b. 可以自行打印CMAKE_INSTALL_PREFIX路徑,比如/usr/local,注意bin前面不能有/。
    c. 所以執(zhí)行行文件的路徑是/usr/local/bin/,so庫文件的安裝路徑是:/usr/local/…/lib/
    d. 此時(shí)可以在Linux系統(tǒng)任何目錄里執(zhí)行./cmake-demo
    e. 如果執(zhí)行make install的時(shí)候出現(xiàn)錯(cuò)誤,加上sudo再次執(zhí)行。
  • 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

    總結(jié)

    以上是生活随笔為你收集整理的Cmake的CMakeLists.txt写法示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。