关于CmakeList的修改
關(guān)于CmakeList的修改
1、CmakeList.txt
下面來研究一下CmakeList.txt文件的編寫方式,先預(yù)覽一下一個完整的需要包括的內(nèi)容
cmake_minimum_required()
要求的CMake最低版本
project()
程序包的名稱
find_package()
編譯依賴的程序包
add_message_files(), add_service_files(), add_action_files()
添加消息、服務(wù)或響應(yīng)文件
generate_messages()
生成消息、服務(wù)或響應(yīng)文件
catkin_package()
catkin程序包
add_library()/add_executable()/target_link_libraries()
添加庫文件,可執(zhí)行文件,鏈接庫文件
catkin_add_gtest()
添加測試單元
install()
安裝
find_package()作用是指定編譯工程需要的其他程序包,這個函數(shù)的參數(shù)至少要包括catkin REQUIRED,我們來看一個典型的find_package()包含的內(nèi)容。
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation
sensor_msgs
)
catkin_package()是catkin提供的CMake宏,對生成的pkg和CMake文件進(jìn)行配置,如果去掉編譯也能通過,但是配置會發(fā)生變化,比如生成的可執(zhí)行文件會在工作空間中的build文件夾中而不是devel/lib文件夾中,這樣可能導(dǎo)致的一個后果是無法使用rosrun指令來運行可執(zhí)行文件。
add_message_files()和generate_messages()是在使用用戶自定義消息時需要添加,這部分可以在學(xué)習(xí)添加自定義消息時再深入學(xué)習(xí)。
add_executable()
指定要編譯的可執(zhí)行文件,例如
add_executable(myNode src/main.cpp src/file1.cpp src/file2.cpp)
上面的語句將調(diào)用src/main.cpp,src/file1.cpp和src/file2.cpp生成名為myNode的目標(biāo)可執(zhí)行文件,生成的可執(zhí)行文件就是我們說的節(jié)點。
add_library()
生成庫文件
target_link_libraries()
指定所生成的可執(zhí)行文件所鏈接的庫文件,通常寫在add_executable()之后。一般來說,要生成一個ros節(jié)點,必須添加catkin_LIBRARIES,例如
target_link_libraries(myNode ${catkin_LIBRARIES})
2、CMake編譯原理
CMake是一種跨平臺編譯工具,比make更為高級,使用起來要方便得多。CMake主要是編寫CMakeLists.txt文件,然后用cmake命令將CMakeLists.txt文件轉(zhuǎn)化為make所需要的makefile文件,最后用make命令編譯源碼生成可執(zhí)行程序或共享庫(so(shared object))。因此CMake的編譯基本就兩個步驟:
cmake
make
cmake 指向CMakeLists.txt所在的目錄,例如cmake … 表示CMakeLists.txt在當(dāng)前目錄的上一級目錄。cmake后會生成很多編譯的中間文件以及makefile文件,所以一般建議新建一個新的目錄,專門用來編譯,例如
mkdir build
cd build
cmake …
make
make根據(jù)生成makefile文件,編譯程序。
2.使用Cmake編譯程序
我們編寫一個關(guān)于開平方的C/C++程序項目,即b= sqrt(a),以此理解整個CMake編譯的過程。
a.準(zhǔn)備程序文件
文件目錄結(jié)構(gòu)如下:
.
├── build
├── CMakeLists.txt
├── include
│ └── b.h
└── src
├── b.c
└── main.c
b.編寫CMakeLists.txt
接下來編寫CMakeLists.txt文件,該文件放在和src,include的同級目錄,實際方哪里都可以,只要里面編寫的路徑能夠正確指向就好了。
c.編譯和運行程序
準(zhǔn)備好了以上的所有材料,接下來,就可以編譯了,由于編譯中出現(xiàn)許多中間的文件,因此最好新建一個獨立的目錄build,在該目錄下進(jìn)行編譯,編譯步驟如下所示:
mkdir build
cd build
cmake …
make
總結(jié)
以上是生活随笔為你收集整理的关于CmakeList的修改的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试常见的智力题
- 下一篇: java图片上传压缩