CMake基本使用

cmake是個很方便的構建系統。官方的文檔寫的很明白,就是有點長。因而,根據本身的使用狀況,挑選其中最重要的,簡要說明於下:c++

CMakeLists.txt的編寫

CMakeLists.txt的命令不區分大小寫。xcode

基本結構

# 最低版本聲明,若是本機的cmake版本小於這個,會告警
cmake_minimum_required(VERSION 3.10)

# set the project name
project(Tutorial)

# add the executable
add_executable(Tutorial tutorial.cxx)
# 生成庫
# add_library( MyMath STATIC mymath.cpp)

注:add_executable和add_library能夠源碼列表,源碼文件能夠在後面經過target_sources添加。由於target_xxx_xxx的命令要求target先定義好,因此這一功能挺重要。app

子目錄

添加子目錄前,須要先爲子目錄編寫CMakeLists.txt。ui

add_subdirectory( MathFunctions )

依賴庫

  • 指定路徑
link_directories(Tutorial  "${PROJECT_SOURCE_DIR}/lib" )

注:link_directories只對在它後面聲明的target有效。c++11

  • 指定庫

target_link_libraries支持多種格式,以libopus.a爲例code

target_link_libraries(Tutorial opus)
target_link_libraries(Tutorial -lopus)
target_link_libraries(Tutorial libopus.a)
# 全路徑
target_link_libraries(Tutorial ${PROJECT_SOURCE_DIR}/lib/libopus.a)

若是不是全路徑模式,須要先指定路徑。
注:target_link_libraries加入的順序很是重要。好比Tutorial依賴libA.a, libA.a依賴libB.a。那麼libA.a須要放在libB.a以前,否則會報錯,說libB.a的符號找不到。聽說是有一個選項,會盡可能去掉沒使用的符號。若是先寫libB.a,則連接libB.a時發現沒有人在使用它,就把它去掉了。不過是啥選項沒研究,默認行爲,仍是注意下順序吧。rem

宏定義

target_compile_definitions(foo PUBLIC FOO)
target_compile_definitions(foo PUBLIC -DFOO)  # -D removed
target_compile_definitions(foo PUBLIC "" FOO) # "" ignored
target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored

#定義帶值的
target_compile_definitions( Tutorial PRIVATE "LOG_LEVEL=2" )

編譯選項

add_compile_options(-Wall -Wextra -pedantic -Werror)
add_compile_options(-std=c++11 -g)

設置變量

set(LIB_SRC src/mymath.cpp src/myadd.cpp ...)

條件生成

if(WIN32)
    xxx
elseif(ANDROID)
    xxx
elseif(IOS)
    xxx
endif

target的生成地址

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})

增長install

#安裝target(lib/app)
install( TARGETS Tutorial DESTINATION bin)
#安裝頭文件
install( FILES ${PROJECT_BINARY_DIR}/config.h DESTINATION include )

有了這個之後,就能夠用make install安裝了文檔

打印信息

寫了CMakeLists.txt,卻不能正常工做的時候,你必定想打印一些信息,看看究竟是哪兒錯了。因而message命令就派上了用場:get

message("Build lib OK !")
message( "use_mymath:${USE_MYMATH}")

CMake命令

默認狀況

cmake 源碼目錄
make

傳遞參數

-D表示設置變量
-U表示取消變量源碼

cmake -DCMAKE_INSTALL_PREFIX=/opt/the/prefix 
-UMyPackage_DIR

生成Xcode或者VS項目

#xcode項目
cmake ./src -GXcode
#VS項目
cmake ./src -G"Visual Studio 12 2013"
相關文章
相關標籤/搜索