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