1. 程式人生 > >CMakeLists.txt語法

CMakeLists.txt語法

CMakeLists.txt是CMake的配置檔案,方便編譯大型專案。我為自己常用的專案寫了一個統一的模板,把常用的語法記錄下來。使用的時候去掉對應的註釋就可以。

cmake_minimum_required(VERSION 2.8)
project(pr)

# ${CMAKE_SOURCE_DIR}: The directory of root CMakeLists.txt
# ${CMAKE_CURRENT_SOURCE_DIR}: The directory of this CMakeLists.txt

#SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/CMakeModules/")
#LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)

#設定編譯模式
#set(CMAKE_BUILD_TYPE "Debug")
#IF(NOT CMAKE_BUILD_TYPE)
#  SET(CMAKE_BUILD_TYPE Release)
#ENDIF()

#使用Qt creater開啟CMakeLists.txt需要有下面2行
#-O0:不優化 
#-Wall:顯示所有警告 
#-g:利用作業系統的原生格式(native format)生成除錯資訊 
#-ggdb:使GCC為GDB生成專用的更為豐富的除錯資訊
#SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
#SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

#C++11
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#add_compile_options(-std=c++11)

#開啟(1)或關閉(0)C++11特性
#if(CONAN_LIBCXX STREQUAL "libstdc++11")
#    add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
#elseif(CONAN_LIBCXX STREQUAL "libstdc++")
#    add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
#endif()

#指定輸出目錄
#set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/libs)
#set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/bin)

#把${PROJECT_NAME}變數值的全小寫賦值給變數LIBRARY_NAME
#STRING(TOLOWER ${PROJECT_NAME} LIBRARY_NAME)

#次級CMakeLists.txt所在路徑
#ADD_SUBDIRECTORY(${LIBRARY_NAME})
#ADD_SUBDIRECTORY(examples)

#新增OpenCV
#set(OpenCV_DIR /home/XXX/software/OpenCV310/share/OpenCV)自定義安裝的OpenCV目錄
#set(CMAKE_PREFIX_PATH /home/master/local_install/)
#find_package(OpenCV 3.1.0 EXACT REQUIRED)
#find_package(OpenCV REQUIRED)
#MESSAGE(STATUS "opencv version: ${OpenCV_VERSION}")
#include_directories(
#	${OpenCV_DIRS}
#	${OpenCV_INCLUDE_DIRS}
#)

#新增openni
#find_package(OpenNI2 REQUIRED)
#include_directories(
#	${OpenNI2_INCLUDE_DIR}
#)

#新增Eigen
#set(Eigen3_DIR /home/boyob/software/eigenunstable/share/eigen3/cmake)
#find_package(Eigen3 REQUIRED)
#include_directories(
#	${EIGEN3_INCLUDE_DIRS}
#	/usr/include/eigen3
#)

#新增G2O
#set(CMAKE_MODULE_PATH   ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) #the location of FindG2O.cmake
#set(G2O_ROOT /home/boyob/software/g2o)
#set(G2O_DIR /home/boyob/software/g2o/share)
#在FindG2O.cmake中根據G2O_ROOT查詢庫和標頭檔案
#find_package(G2O REQUIRED) 
#include_directories( 
#    ${G2O_INCLUDE_DIR}
#)
#link_directories(${G2O_ROOT}/lib)

#新增Boost
##set(BOOST_ROOT "/opt/boost")
#set(BOOST_ROOT /home/boyob/software/boost159)
##set(BOOST_LIBRARY_DIR "" CACHE PATH " directory of the boost lib")
##set(BOOST_INCLUDE_DIR "" CACHE PATH " directory of the boost headers")
##SET(BOOST_LIBRARYDIR "${BOOST_LIBRARY_DIR}")
##SET(BOOST_INCLUDEDIR "${BOOST_INCLUDE_DIR}")
##set(Boost_USE_STATIC_LIBS ON)
##set(Boost_USE_MULTITHREADED ON)
##set(Boost_USE_STATIC_RUNTIME OFF)
#find_package(Boost REQUIRED COMPONENTS
#	regex
#	filesystem
#	system
#	thread
#)
#if(NOT Boost_FOUND)
#	message("--Failed to find Boost.")
#endif()
#include_directories(
#	${Boost_INCLUDE_DIRS}
##	/opt/boost/lib
#)

#新增pcl
#set(PCL_DIR /home/boyob/software/pcl180/share/pcl-1.8)
#find_package(PCL REQUIRED)
#include_directories(${PCL_INCLUDE_DIRS})
#link_directories(${PCL_LIBRARY_DIRS})
#add_definitions(${PCL_DEFINITIONS})

#set(BUILD_USE_64BITS on)

#第三方庫路徑 
#Equivalent to add "LD_LIBRARY_PATH" in ~/.bashrc
#link_directories(
#	${PROJECT_SOURCE_DIR}/libs
#)

#標頭檔案路徑
#include_directories(
#	${PROJECT_SOURCE_DIR}/include	#(project location)
#	${CMAKE_SOURCE_DIR}
#	include
#)

#生成庫
#file(GLOB_RECURSE source_files ${CMAKE_CURRENT_SOURCE_DIR}/*.cc) #GLOB:不遞迴
#add_library(${PROJECT_NAME} #STATIC | SHARED | MODULE
#	${source_files}
#	src/lib/lib.cc
#)
#生成庫需要的依賴
#target_link_libraries(${PROJECT_NAME}
#	${OpenCV_LIBS}
#	${EIGEN3_LIBS}
#)

#生成可執行檔案
add_executable(run main.cc)
#生成可執行檔案需要的依賴
#target_link_libraries(run
#	${OpenCV_LIBS}
#	${OpenNI2_LIBRARY}
#	${PROJECT_NAME}
#	g2o_core g2o_stuff
#	${Boost_LIBRARIES}
#	${PCL_LIBRARIES}
#	pthread
#)
#add_dependencies(run ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})