cmake是個很方便的構建系統。官方的文檔寫的很明白,就是有點長。因而,根據本身的使用狀況,挑選其中最重要的,簡要說明於下:c++
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
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
#安裝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 源碼目錄 make
-D表示設置變量
-U表示取消變量源碼
cmake -DCMAKE_INSTALL_PREFIX=/opt/the/prefix -UMyPackage_DIR
#xcode項目 cmake ./src -GXcode #VS項目 cmake ./src -G"Visual Studio 12 2013"