cmake 使用和 CMakeLists.txt 編寫筆記

# 指定要求的最低 CMake 版本
cmake_minimum_required(VERSION 3.12)
# 指定工程名
project(demo)

# 設置編譯選項
# CMAKE_C_FLAGS 爲 gcc 編譯器選項
# CMAKE_CXX_FLAGS 爲 g++ 編譯器選項
set(CMAKE_C_FLAGS " ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")

# 設置編譯模式
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")  
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
# 設置 Debug 模式可以進行調試
# CMAKE_BUILD_TYPE 爲 cmake 編譯模式變量
set(CMAKE_BUILD_TYPE  Debug)
# 設置 Release 模式
set(CMAKE_BUILD_TYPE  Release)

# 引用子 cmake 文件,一般用於定義自己的 cmake 命令和查找依賴庫
include(${CMAKE_SOURCE_DIR}/cmake/Utils.cmake)

# find_package 用於查找依賴的第三方庫
# 這裏以 opencv 爲例
if (UNIX)
  set(OpenCV_DIR "/usr/local/include/opencv3.2.0/share/OpenCV")
endif()
find_package( OpenCV REQUIRED )

# set 用於自定義變量
# 這裏是列舉源文件名,方便後面使用
set(SRCS
  example01.cpp  \
  example02.cpp
)
# set 以追加的方式添加定義
set(SRCS ${SRCS} example03.cpp)

# list 用於追加或者刪除變量的值
list(APPEND SRC_LIST test.cpp)
list(REMOVE_ITEM SRC_LIST main.cpp)

# include_directories 指定頭文件查找目錄
include_directories( 
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/include
  ${OpenCV_INCLUDE_DIRS} 
)

# link_directories 指定鏈接庫搜索目錄
link_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/libs
)

# 用 if .. else .. 進行不同平臺的配置
# 這裏是根據不同平臺指定可執行文件名字
if (UNIX OR APPLE)
  set(EXE_NAME "${SOURCE_NAME}.bin")
elseif (WIN32)
  set(EXE_NAME "demo")
endif()

# message 打印信息
message("exe name: " ${EXE_NAME})

# FATAL_ERROR: CMake 錯誤,停止運行和生成
# SEND_ERROR: CMake 錯誤,  繼續運行但不會生成結果
# WARNING: CMake 警告, 繼續運行
# AUTHOR_WARNING: CMake 警告(dev), 繼續運行 (ps: 沒搞懂 dev 什麼意思)
# DEPRECATION: 如果變量 CMAKE_ERROR_DEPRECATED 或者 
#                             CMAKE_WARN_DEPRECATED 被啓用的話則會報錯誤或者警告
# STATUS: 給用戶看的主要的提示信息
# 還有幾個放鏈接了太長了... [message 文檔](https://cmake.org/cmake/help/v3.18/command/message.html?highlight=message)
message(STATUS "message 打印消息: " ${EXE_NAME})

# add_executable 用於生成可執行文件
add_executable(${EXE_NAME} ${SRCS})
# target_link_libraries 用於指定鏈接庫
# 這裏鏈接了自己和 pthread 系統庫和 opencv 第三方庫
target_link_libraries(${EXE_NAME} pthread ${OpenCV_LIBS})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章