在學習他人**的過程中了解到一些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.原始檔包含 ...