CMakeLists檔案規劃學習

2021-10-14 21:56:09 字數 2333 閱讀 6257

在學習他人**的過程中了解到一些cmakelists的使用技巧,所以進行乙個簡單總結

呼叫乙個包,就是常規的三個步驟:find_package,include_directions,target_link_libraries

包多的時候**太雜,所以我們需要把每個包對應的這些操作放在cmake資料夾下對應的xx.cmake檔案中,然後在cmakelists中include(cmake/xx.cmake)一行**就可以搞定。

為了避免target_link_libraries後面跟著很長一串庫的名字,而且庫增減的時候也要跟著增減,我們在cmakelists檔案開始就定義乙個變數

set(all_target_libraries "")
然後在每個庫對應的xx.cmake檔案中,把庫的名字合併到這個變數中去

這樣在target_link_libraries中只需要使用all_target_libraries這乙個變數就可以了

除了庫對應的變數,還有檔案對應的變數,我們在add_executable的時候要把所需要的cpp檔案路徑都寫進去,檔案多的時候較麻煩,所有可以使用下面的指令,把所有cpp檔案合併到乙個變數中

file(glob_recurse all_srcs "*.cpp")
但是,當工程中有多個node檔案的時候,就要把他們從這個變數中踢出去,因為多個node檔案編到乙個可執行檔案會出錯,用下面的**踢:

file(glob_recurse node_srcs "src/*_node.cpp")

list(remove_item all_srcs $)

cmake_minimum_required(version 2.8.3)

project(lidar_localization)

set(cmake_build_type "release")

set(cmake_cxx_flags_release "$env -o3 -wall")

add_compile_options(-std=c++11)

add_definitions(-std=c++11)

find_package(catkin required components

roscpp

rospy

std_msgs

pcl_ros

geometry_msgs

tfeigen_conversions

message_generation

std_srvs

)add_service_files(

files

optimizemap.srv

)generate_messages(

dependencies

std_msgs

)#設定乙個變數 all_target_libraries 然後在各個.cmake檔案中,把庫的名字合併到這個變find_package量中去

set(all_target_libraries "")

include(cmake/pcl.cmake)

include_directories(include $)

catkin_package()

#把當前的.cpp檔案都合併到變數all_srcs中去 ,後面add_executable時就不需要把所有cpp檔案路徑都寫入了

file(glob_recurse all_srcs "*.cpp")

#把所有_node.cpp檔案都合併到變數node_srcs中,用於後面踢除

#在所有的.cpp檔案中踢除_node.cpp檔案

list(remove_item all_srcs $)

#現在可以直接使用我們前面定義的變數all_srcs

#使用我們前面定義的變數all_target_libraries

target_link_libraries(test_frame_node $ $)

add_dependencies(data_pretreat_node $)

target_link_libraries(data_pretreat_node $ $)

find_package(pcl 1.7 required)

list(remove_item pcl_libraries "vtkproj4")

include_directories($)

#每個庫所對應的.cmake檔案中,把每個庫的名字合併到all_target_libraries這個變數上去

文件中若有錯誤請指出,萬分感謝!

CmakeLists檔案說明

cmakelists.txt 設定構建native library所需的最小cmake版本 cmake minimum required version 3.4.1 aux source directory studycpp dir srcs file glob allcpp.建立和命名乙個庫 ad...

CMakeLists檔案的編寫

一 cmake使用慣例 1 在專案根目錄建立乙個build目錄 mkdir build cd build 2 執行 cmake 3 確定生成makefile成功,執行make 二 乙個簡單的例子 假設當前的目錄為test 1 新建hello.cpp 2 新建cmakelists.txt 內容 add...

CMakeLists檔案總結 不定更新

1.設定cmake版本 專案名稱等 cmake minimum required version 3.15 project setprojectname set cmake cxx standard 14 2.標頭檔案包含目錄 include directories include 3.原始檔包含 ...