CMake入門筆記

CMake 入門

CMake通過CMakeLists.txt生成makefile,對於含有大量文件的工程編譯十分方便。

指令 解釋
PROJECT 設定工程名(可與生成目標名不同),該指令隱式定義了_BINARY_DIR和_SOURCE_DIR PROJECT(helloworld)
SET 設置變量 SET(SRC_LIST main.c fun.c)
MESSAGE 打印消息 MESSAGE(STATUS/SEDN_ERROR/FATAL_ERROR “todisplay” )
ADD_EXEUTABLE 生成目標文件 ADD_EXEUTABLE(your_exe main.c fun.c)
ADD_LIBRARY 生成動態庫或靜態庫 ADD_LIBRARY(your_lib_name STATIC/SHARED> )
SET_TARGET_PROPERTIES 可用於同時生成.so和.lib,設置.so的版本號和api號 NA
ADD_SUBDIRECTORY 添加包含源文件的子目錄 NA
TARGET_LINK_LIBRARIES 鏈接需要的library TARGET_LINK_LIBRARIES(project_name lib***.so/*) TARGET_LINK_LIBRARIES(project_name ${GTEST_LIBRARY})
LINK_DIRECTORIES 添加非標準的庫搜索庫搜索路徑 NA
INCLUDE_DIRECTORIES 添加頭文件搜索路徑 (BEFORE {OpenCV_INCLUDE_DIRS}) BEFORE 添加的頭文件搜索路徑在默認路徑的前面,反之AFTER
INSTALL 可以用於安裝生成的可執行文件 .so .lib 和 .sh以及一般文件 NA

常見錯誤:

  • set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

  • 誤用 LIBRARY_OUTPUT_DIRECTORY是無法設置輸出路徑的。 CMakeLists.txt 錯誤 寫的.c文件,C++頭文件make找不到,改成.cpp或cc


mkdir Project

cd Project

gedit CMakeLists.txt

mkdir src

cd src

touch main.c

vi main.c

:qw

mkdir build

cd build

gedit CMakeLists.txt

#CMAKE 常用外部構建,out-of-source,  舉個例子,將構建過程放到build, 在buil的目錄下 cmake ..

cmake .. 

make -j 

CMake進階

Cross Compile

It is effective to have a cross compiling when debugging

Host PC: x86

Target: TX2 aarch64


sudo apt-get install g++-4.9-aarch64-linux-gnu

#Point out the target

set(CMAKE_SYSTEM_NAME Linux)

#Specify the cross compiler

#set(CMAKE_CXX_COMPILER /path/to/compiler)

set(CAME_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)

# Just make sure you set the CMAKE_FIND_ROOT_PATH variable to a path where you have #an exact copy of the root filesystem you have on your target device (with libraries and binaries #pre-compiled for the target processor).

set(CMAKE_FIND_ROOT_PATH /path/to/copied root filesysem of target)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

CMAKE_FIND_ROOT_PATH_MODE_PROGRAM sets the default behaviour for the FIND_PROGRAM() command. It can be set to NEVER, ONLY or BOTH (default). If set to NEVER, CMAKE_FIND_ROOT_PATH will not be used for FIND_PROGRAM() calls (except where it is enabled explicitely). If set to ONLY, only the search directories with the prefixes coming from CMAKE_FIND_ROOT_PATH will be used in FIND_PROGRAM(). The default is BOTH, which means that at first the prefixed directories and after that the unprefixed directories will be searched. In most cases FIND_PROGRAM() is used to search for an executable which will then be executed e.g. using EXECUTE_PROCESS() or ADD_CUSTOM_COMMAND(). So in most cases an executable from the build host is required, so usually set CMAKE_FIND_ROOT_PATH_MODE_PROGRAM to NEVER.

You can make above file to ba X.cmake, and use CMAKE_TOOLCHAIN_FILE


cd build

cmake -DCMAKE_TOOLCHAIN_FILE = ~/X.cmake ..
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章