日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Tools】cmake之编写CMakeLists.txt示例

發布時間:2025/3/21 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Tools】cmake之编写CMakeLists.txt示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考這個博客: cmake配置項目引用動態庫

編寫CMakeLists.txt

指定cmake版本:
cmake_minimum_required(VERSION 3.18)

指定項目名:
PROJECT(lib_demo)

將主項目src文件夾下的所有源文件拷貝到變量demo_src中:
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src demo_src)

指定 cmake搜索庫路徑:
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

重點來了,項目引用動態庫:
FIND_PACKAGE(calc REQUIRED)

創建可執行程序:
add_executable(${PROJECT_NAME} ${demo_src})

生成靜態庫 libmylib.a :
add_library(mylib STATIC ${SOURCES})
生成動態庫 libmylib.so :
add_library(mylib SHARED test.cpp)
指定要生成的靜態庫(STATIC)或動態庫(SHARED),如果不指定,則根據BUILD_SHARED_LIBS選項是否打開來生成默認的版本,ON 生成動態庫,OFF 生成靜態庫

主項目指定庫頭文件路徑:
target_include_directories(${PROJECT_NAME} PUBLIC ${calc_INCLUDE_DIR})
注意: calc_INCLUDE_DIR來自cmake文件中定義的變量,方便下游使用


主項目鏈接庫:
target_link_libraries(${PROJECT_NAME} PUBLIC ${calc_LIBRARY})
例:target_link_libraries(demo PUBLIC test)
demo是可執行文件名 或者 庫名,該指令會在鏈接庫目錄(包括系統默認庫目錄和指定的自定義庫目錄)下搜索文件:

  • Windows下會搜索test.lib文件;
  • Linux下會搜索libtest.a和libtest.so
    對于target_link_libraries()
  • 如果 target 是一個 library,該命令可以用來指定依賴本倉庫的 target 還需要鏈接另外的倉庫,用于解決循環依賴;
  • 如果 target 是可執行文件,則該命令用于指定其需要鏈接的庫;
  • 如果link的target已經include過XXX了,就不用再target_include_directories添加庫文件路徑了。

以下舉例一句一句說明:
# 代碼路徑 set(SOURCES_PATH ../../../src)glob_sources(TEST_NODE_SOURCES ${SOURCES_PATH}/pinecone/nodes/camera/lane_detection)#創建可執行程序,test_node就是生成的可執行文件名 add_executable(test_node ${TEST_SOURCES})#指定本節點動態庫頭文件路徑,即指定編譯 target 所需要的頭文件。PUBLIC 和 INTERFACE 具有依賴傳遞性,而 PRIVATE 沒有。: target_include_directories(test_node PUBLIC ${SOURCES_PATH})# 為可執行文件鏈接庫 target_link_libraries(test_node pinecone camera_common camera_rosap opencv tensorrt-pix2pix h265decoder)set_target_properties(test_node PROPERTIES LINK_FLAGS ${COMMON_LINK_FLAG})

本例中target_link_libraries()是為可執行文件鏈接庫時,其中的一個庫camera_common庫是通過下面的命令生成的庫:

glob_sources(CAMERA_COMMON_SOURCES ${SOURCES_PATH}/pinecone/nodes/camera/common) add_library(camera_common ${CAMERA_COMMON_SOURCES}) target_include_directories(camera_common PUBLIC ${SOURCES_PATH}) target_link_libraries(camera_common pinecone opencv )

若要測試動態鏈接是否成功,可以使用ldd指令查看:
ldd 二進制程序

總結

以上是生活随笔為你收集整理的【Tools】cmake之编写CMakeLists.txt示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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