Learn CMakeLists.txt
From One Project
- Description: This
CMakeLists.txt
is from a project about Collect Data From Kinect. This project cannot be source-open, but I show the directory structure below.
Commonly-Used Methods
cmake_minimum_required
cmake_minimum_required(VERSION 2.8)
設置最小cmake版本號。c++
project
project(<project_name>)
設置工程名稱,後面就能夠用 ${PROJECT_NAME}
來調用。bash
set
舉例:函數
set(CMAKE_CXX_FLAGS "-std=c++11 -g")
設置 CMAKE_CXX_FLAGS
,好比能夠加入C++11標準和gdb調試的支持。ui
add_subdirectory
有多目錄時,能夠先將其餘目錄裏的文件編譯成靜態庫再由 main 函數調用。 根目錄 CMakeLists.txt
中添加:spa
add_subdirectory(<sub_dir>)
<sub_dir>
不加引號。 而後子目錄 CMakeLists.txt
中使用 aux_source_dir
和 add_library
,見 5 和 6。插件
add_library
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [source1] [source2] [...])
ADD_LIBRARY
creates an static library from the listed sources. STATIC
、SHARED
和MODULE
的做用是指定生成的庫文件的類型。debug
STATIC
庫是目標文件的歸檔文件,在連接其它目標的時候使用。默認使用類型。SHARED
庫會被動態連接(動態連接庫),在運行時會被加載。MODULE
庫是一種不會被連接到其它目標中的插件,可是可能會在運行時使用dlopen-系列的函數。 默認狀態下,庫文件將會在於源文件目錄樹的構建目錄樹的位置被建立,該命令也會在這裏被調用。
語法中的source1 source2分別表示各個源文件。3d
aux_source_directory
aux_source_directory(./ DIR_BPE_SRCS) add_library(boxposeestimator ${DIR_BPE_SRCS})
查找當前目錄下的全部源文件並將名稱保存到 DIR_BPE_SRCS
變量調試
include_directories
指定頭文件(*.h, *.hpp)所在路徑('/path/to/include/')。
至關於 g++ -I
。c++11
add_executable
add_executable(wheel ${DIRSRCS})
將 ${DIRSRCS}
下全部的源文件編譯成一個名稱爲 wheel 的可執行文件。
link_directories
主要是指定要連接的庫文件的路徑('/path/to/lib/'),該指令有時候不必定須要。由於find_package和find_library指令能夠獲得庫文件的絕對路徑。 不過本身寫的動態庫文件放在本身新建的目錄下時,能夠用該指令指定該目錄的路徑以便工程可以找到。
至關於 g++ -L
。
target_link_libraries
指定要連接的庫文件(.so)。
至關於 g++ -l
Directory Structure
這裏展現我這個工程的文件樹結構。
wheel_data_acq_loc/ ├── boxposeestimator │ ├── boxposeestimator.cpp │ ├── boxposeestimator.h │ ├── CMakeLists.txt │ └── README.md ├── build │ ├── boxposeestimator │ ├── CMakeCache.txt │ ├── CMakeFiles │ ├── cmake_install.cmake │ ├── Makefile │ └── wheel ├── camera3dData.cpp ├── camera3dData.h ├── camera3dDataKinectV2IRLinux.cpp ├── camera3dDataKinectV2IRLinux.h ├── CMakeLists.txt ├── ConfigCameraKinectV2.yaml └── main_demo_Linux.cpp
有兩個 CMakeLists.txt
文件。
wheel_data_acq_loc/CMakeLists.txt
cmake_minimum_required(VERSION 2.8) project(wheel) # 設置debug模式 set(cmake_build_type debug) # 設置支持C++11標準和支持gdb調試 set(CMAKE_CXX_FLAGS "-std=c++11 -g") # 打印 message(STATUS "Project: WHEEL") message(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}") find_package(OpenCV REQUIRED) find_package(PCL REQUIRED) find_package(freenect2 REQUIRED) # Add the source in project root directory #aux_source_directory(<dir> <variable>) aux_source_directory(. DIRSRCS) # Add header file (.h, .hpp, etc) include directories ###g++ -I### ('../include/') include_directories(./ ./boxposeestimator) include_directories(${OpenCV_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS} ${freenect2_INCLUDE_DIRS}) #add_definitions(${OpenCV_DEFINITIONS} ${PCL_DEFINITIONS} ${freenect2_DEFINITIONS}) # Add block directories add_subdirectory(boxposeestimator) # Target add_executable(wheel ${DIRSRCS}) ###g++ -L### ('../lib/') link_directories(${OpenCV_LIBRARY_DIRS} ${PCL_LIBRARY_DIRS} ${freenect2_LIBRARY_DIRS}) ###g++ -l### (.so) target_link_libraries(wheel ${PCL_LIBRARIES} ${OpenCV_LIBS} ${freenect2_LIBRARIES} boxposeestimator)
wheel_data_acq_loc/boxposeestimator/CMakeLists.txt
aux_sourcedirectory(. DIR_BPE_SRCS) add_library(boxposeestimator ${DIR_BPE_SRCS})