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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

CMakeLists.txt学习记录

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMakeLists.txt学习记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Cmake 學習地址與作用

cmake詳細見:https://gitlab.kitware.com/cmake/community/-/wikis/home

是一個跨平臺、開源的構建系統。它是一個集軟件構建、測試、打包于一身的軟件。它使用與平臺和編譯器獨立的配置文件來對軟件編譯過程進行控制。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

二、常用命令?

# 聲明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )# 聲明一個 cmake 工程
project( HelloSLAM )# 設置編譯模式
set( CMAKE_BUILD_TYPE "Debug" )# 添加一個可執行程序
# 語法:add_executable( 程序名 源代碼文件 )
add_executable( helloSLAM helloSLAM.cpp )# 添加一個庫
add_library( hello libHelloSLAM.cpp )
# 共享庫
add_library( hello_shared SHARED libHelloSLAM.cpp )add_executable( useHello useHello.cpp )
# 將庫文件鏈接到可執行程序上
target_link_libraries( useHello hello_shared )

*1.指定 cmake 的最小版本 :

命令可選,可以不寫,版本向后兼容。但如果所安裝CMakeLists.txt 文件中使用了一些高版本 cmake 特有的一些命令的時候,就必須加這一行,提醒用戶升級到該版本之后再執行 cmake。

cmake_minimum_required(VERSION 2.8)

?*2. 設置項目名稱:

這里就是“helloworld”,這個命令不是強制性的,但最好都加上。它會引入兩個變量 demo_BINARY_DIR 和 demo_SOURCE_DIR,同時,cmake 自動定義了兩個等價的變量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。?

project(helloworld)

?*3. 設置編譯類型

add_library 默認生成是靜態庫,通過以上命令生成文件名字,

  • 在 Linux 下是:
    demo
    libcommon.a
    libcommon.so
  • 在 Windows 下是:
    demo.exe
    common.lib
    common.dll
add_executable(helloworld helloworld.cpp) # 生成可執行文件
add_library(common STATIC util.cpp) # 生成靜態庫
add_library(common SHARED util.cpp) # 生成動態庫或共享庫

?4. 指定編譯包含的源文件

*4.1 明確指定包含哪些源文件?

add_library(helloworld helloworld .cpp test.cpp util.cpp)

4.2 搜索所有的 cpp 文件

?aux_source_directory(dir VAR) 發現一個目錄下所有的源代碼文件并將列表存儲在一個變量中。

aux_source_directory(. SRC_LIST) # 搜索當前目錄下的所有.cpp文件
add_library(demo ${SRC_LIST})

?4.3 自定義搜索規則

file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
add_library(helloworld ${SRC_LIST})
# 或者
file(GLOB SRC_LIST "*.cpp")
file(GLOB SRC_PROTOCOL_LIST "protocol/*.cpp")
add_library(helloworld ${SRC_LIST} ${SRC_PROTOCOL_LIST})
# 或者
aux_source_directory(. SRC_LIST)
aux_source_directory(protocol SRC_PROTOCOL_LIST)
add_library(helloworld ${SRC_LIST} ${SRC_PROTOCOL_LIST})

5. 查找指定的庫文件

find_library(VAR name path)查找到指定的預編譯庫,并將它的路徑存儲在變量中。
默認的搜索路徑為 cmake 包含的系統庫,因此如果是 NDK 的公共庫只需要指定庫的 name 即可。

cmake_minimum_required( VERSION 2.8 )
project( visualizeGeometry )set(CMAKE_CXX_FLAGS "-std=c++11")# 添加Eigen頭文件
include_directories( "/usr/include/eigen3" )# 添加Pangolin依賴
find_package( Pangolin )
include_directories( ${Pangolin_INCLUDE_DIRS} )add_executable( visualizeGeometry visualizeGeometry.cpp )
target_link_libraries( visualizeGeometry ${Pangolin_LIBRARIES} )

類似的命令還有 find_file()、find_path()、find_program()、find_package()。

??6. 設置包含的目錄

#example
include_directories( ${Pangolin_INCLUDE_DIRS} )include_directories(${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_CURRENT_BINARY_DIR}${CMAKE_CURRENT_SOURCE_DIR}/include
)

7. 設置鏈接庫搜索目錄

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/libs
)

Linux 下還可以通過如下方式設置包含的目錄?

?
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}")

8. 設置 target 需要鏈接的庫

target_link_libraries( # 目標庫demo# 目標庫需要鏈接的庫# log-lib 是上面 find_library 指定的變量名${log-lib} )

?在 Windows 下,系統會根據鏈接庫目錄,搜索xxx.lib 文件,Linux 下會搜索 xxx.so 或者 xxx.a 文件,如果都存在會優先鏈接動態庫(so 后綴)。

8.1 指定鏈接動態庫或靜態庫

target_link_libraries(demo libface.a) # 鏈接libface.a
target_link_libraries(demo libface.so) # 鏈接libface.so

8.2 指定全路徑

target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.a)
target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.so)

?8.3 指定鏈接多個庫

target_link_libraries(demo${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.aboost_system.aboost_threadpthread)

9. 設置變量

9.1 set 直接設置變量的值

set(SRC_LIST main.cpp test.cpp)
add_executable(demo ${SRC_LIST})

9.2 set 追加設置變量的值

set(SRC_LIST main.cpp)
set(SRC_LIST ${SRC_LIST} test.cpp)
add_executable(demo ${SRC_LIST})

9.3 list 追加或者刪除變量的值

set(SRC_LIST main.cpp)
list(APPEND SRC_LIST test.cpp)
list(REMOVE_ITEM SRC_LIST main.cpp)
add_executable(demo ${SRC_LIST})

10. 自定義編譯選項

cmake 允許為項目增加編譯選項,從而可以根據用戶的環境和需求選擇最合適的編譯方案。
例如,可以將 MathFunctions 庫設為一個可選的庫,如果該選項為 ON ,就使用該庫定義的數學函數來進行運算,否則就調用標準庫中的數學函數庫。

修改根目錄下的 CMakeLists.txt 文件如下:

# CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)
# 項目信息
project (Demo)
# 加入一個配置頭文件,用于處理 CMake 對源碼的設置
configure_file ("${PROJECT_SOURCE_DIR}/config.h.in""${PROJECT_BINARY_DIR}/config.h")
# 是否使用自己的 MathFunctions 庫
option (USE_MYMATH"Use provided math implementation" ON)
# 是否加入 MathFunctions 庫
if (USE_MYMATH)include_directories ("${PROJECT_SOURCE_DIR}/math")add_subdirectory (math)set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
# 查找當前目錄下的所有源文件
# 并將名稱保存到 DIR_SRCS 變量
aux_source_directory(. DIR_SRCS)
# 指定生成目標
add_executable(Demo ${DIR_SRCS})
target_link_libraries (Demo ${EXTRA_LIBS})

configure_file 命令用于加入一個配置頭文件 config.h ,這個文件由 cmake 從 config.h.in 生成,通過這樣的機制,將可以通過預定義一些參數和變量來控制代碼的生成。
option 命令添加了一個 USE_MYMATH 選項,并且默認值為 ON 。根據 USE_MYMATH 變量的值來決定是否使用我們自己編寫的 MathFunctions 庫。
?

總結

以上是生活随笔為你收集整理的CMakeLists.txt学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看欧美成人 | 最近2019中文字幕大全第二页 | 精品久久久久久久久久久国产字幕 | 久婷婷 | 波多野结衣50连登视频 | 成人欧美性 | 91看片黄 | 精品一区二区三区在线播放 | 久久久久久久色 | 女人高潮被爽到呻吟在线观看 | 国产三级播放 | 99久热| 日本女人黄色片 | av网站亚洲| jizz亚洲女人高潮大叫 | 国产精品国产三级国产专播品爱网 | 自拍视频第一页 | 日韩av片在线播放 | 久综合 | 日本激情一区二区三区 | 欧美打屁股 | av片网| 日韩免费视频网站 | 久久久久中文字幕亚洲精品 | 91免费国产视频 | 亚洲天堂视频一区 | 自拍视频在线观看 | 在线无| www成年人| 91丨porny丨露出 | 性色欲网站人妻丰满中文久久不卡 | 中国一级黄色大片 | 北条麻妃久久 | 国产精品美女久久久久av爽 | 天天尻 | 四虎国产精品成人免费入口 | 欧美巨大另类极品videosbest | 国产色在线,com| 香蕉在线播放 | 亚洲私拍 | 久久久精品在线观看 | 综合久久久久久 | 呦女精品| 麻豆av网 | 操操影视 | 黄色三级三级三级三级 | 边吃奶边添下面好爽 | 国产精品久久久久野外 | 欧美专区视频 | 国产精品久久久久久 | 加勒比综合网 | 九九精品免费 | 中文字字幕在线中文 | 亚洲情涩 | 中文人妻熟女乱又乱精品 | 天天艹天天爽 | 操操插插| 日日摸夜夜添狠狠添欧美 | 在线超碰91| 337p粉嫩大胆噜噜噜噜69影视 | 美女黄视频在线观看 | 91视频色| 91黄址| 亚洲加勒比在线 | 夜夜嗨av一区二区三区四区 | 青青草av | 国产精品一区一区三区 | 日日操影院 | 午夜看片| 亚洲成人网在线 | 91九色精品 | www.国产成人 | 国产免费自拍视频 | 亚洲国产mv| 欧美另类极品videosbest使用方法 | 伊人久久99 | 一级性毛片| 日韩免费电影一区 | 天天摸天天碰天天爽天天弄 | 中文字幕日韩欧美在线 | 亚洲五码在线 | 国产精品99久久久久久宅男 | 国产av无码专区亚洲av毛网站 | 亚欧中文字幕 | 91久久一区| 成人国产一区二区 | 亚洲成人麻豆 | 成人午夜影院 | 伊人春色在线视频 | 337p日本欧洲亚洲鲁鲁 | 黄色视屏在线 | 99ri精品 | 污视频导航 | 国产精品久久av | 黄色不雅视频 | 国产中文字幕免费 | 6—12呦国产精品 | 成人黄网免费观看视频 | 亚洲午夜av在线 |