.so 依赖目录 cmake_CMake 的研究与学习笔记
cmake是一個跨平臺項目生成工具,他根據不同的平臺從源代碼中生成相應的項目工程,可以生成包括makefile,vs等項目文件。
CMake的使用
以生成makefile為例 cmake dir : 將在dir中尋找CMakeLists.txt文件,并在當前所在目錄生成工程文件 make : 在當前目錄尋找makefile文件,對整個工程項目進行構建
CMakeLists.txt
這個文本文件描述了需要生成的源文件,以及怎么生成項目文件。 通過一系列的指令描述。
指令
project (name)
創(chuàng)建兩個變量: - _BINARY_DIR : 二進制文件保存目錄 - _SOURCE_DIR : 源代碼目錄
set (var val)
設置變量
add_executable (name srclist)
name為需要編譯成的可執(zhí)行文件的名稱
srclist為需要編譯的源文件列表
add_library (name [SHARED|STATIC|MODULE] scrlist)
生成庫文件 name 為生成的庫文件的名稱.
scrlist 為需要編譯的源文件.
[SHARED|STATIC|MODULE] 制定為動態(tài)/靜態(tài)庫.
add_subdirectory (src_dir [binary_dir] [EXCLUDE_FROM_ALL])
添加源文件子目錄
set_target_properties (target1 target2 ...PROPERTIES prop1 value1 prop2 value2 ...)
設置目標屬性
include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
添加頭文件搜索目錄 [AFTER|BEFORE]來決定是添加到所有目錄之前還是之后
link_directories(dirs)
添加庫文件搜索目錄
add_definitions (d)
添加宏定義
add_dependencies (target depend-target1 ...)
添加依賴 確保target會在depend-target之后才編譯
aux_source_directory (dir var)
搜索dir目錄下的所有源文件然后添加到var變量中去
target_link_libraries (target libs)
將target鏈接庫文件
message ([SEND_ERROR | STATUS | FATAL_ERROR] messages)
輸出消息
cmake_minimum_required(VERSION2.5 FATAL_ERROR)
設置cmake的最低要求版本為2.5
exec_program (exe_dir ARGS ... OUTPUT_VARIABLE ... RETURN_VALUE ...)
執(zhí)行程序,傳入參數ARGS,輸出OUTPUT_VARIABLE,返回RETURN_VALUE
include (cmake_file)
加載CMakeLists.txt文件或cmake預定義模塊
find_*
- find_file (<VAR> name path...) 尋找文件儲存到var中
- find_library (<VAR> name path...)
- find_path (<VAR> name path...)
- find_program (<VAR> name path...)
- find_package (<name> [major.minor] [QUIET][NO_MODULE] [[REQUIRED|COMPONENTS] [componets...]]) : 調用Find.cmake模塊
install (TARGETS ... [[ARCHIVE|LIBRARY|RUNTIME] [DESTINATION <dir>][PERMISSIONS permissions...][CONFIGURATIONS[Debug|Release|...]][COMPONENT <component>][OPTIONAL]] [...])
將target安裝到指定目錄,需要使用指令make install
內置變量
- CMAKE_MAJOR_VERSION
- CMAKE_MINOR_VERSION
- CMAKE_PATCH_VERSION
- CMAKE_SYSTEM : 系統(tǒng)名稱
- CMAKE_SYSTEM_NAME : 不包括版本號的系統(tǒng)名稱
- CMAKE_SYSTEM_VERSION
- CMAKE_SYSTEM_PROCESSOR : 處理器
- UNIX : 包括mac 和 cygwin
- WIN32 : 包括cygwin
- CMAKE_C_FLAGS : c編譯選項
- CMAKE_CXX_FLAGS : cxx編譯選項
流程控制
- IF(cond) ELSEIF(cond) ENDIF(cond)
- WHILE(cond) ENDWHILE(cond)
- FOREACH(loop_var arg1 arg2 ...) ENDFOREACH(loop_var)
- FOREACH(loop_var RANGE start stop [step]) ENDFOREACH(loop_var)
- FOREACH(loop_var RANGE total) ENDFOREACH(loop_var)
雜項
- 可以通過${變量名}來獲取變量的值
一個實例
cmake_minimum_required (VERSION 3.12)project (FirstTestApp)#設置編譯flags set(CMAKE_C_FLAGS "-m64") set(CMAKE_CXX_FLAGS "-std=c++11 -m64") set(LIB_DIR "/opt/local/lib")#添加頭文件目錄和庫文件目錄 include_directories(. /opt/local/include ./classes ./components ./math ./singletons) link_directories(${LIB_DIR})#添加源文件 aux_source_directory(. SRC_LIST) aux_source_directory(./classes SRC_LIST) aux_source_directory(./components SRC_LIST) aux_source_directory(./math SRC_LIST) aux_source_directory(./singletons SRC_LIST) aux_source_directory(./glad/src SRC_LIST)#message(STATUS ${SRC_LIST}) message(STATUS "[MSG]system:${CMAKE_SYSTEM}")set(FirstTestApp_BINARY_DIR ${FirstTestApp_BINARY_DIR}/output) message(${FirstTestApp_BINARY_DIR})#添加可執(zhí)行文件 add_executable(FirstTestApp ${SRC_LIST})#尋找相應的庫文件 find_library(GLFW_LIB glfw3 ${LIB_DIR}) find_library(OPENGL_LIB OpenGL ${LIB_DIR}) find_library(COCOA_LIB Cocoa ${LIB_DIR}) find_library(IOKIT_LIB IOKit ${LIB_DIR}) find_library(COREFOUNDATION_LIB CoreFoundation ${LIB_DIR}) find_library(COREVIDEO_LIB CoreVideo ${LIB_DIR})#執(zhí)行鏈接 target_link_libraries(FirstTestApp ${GLFW_LIB} GL X11 pthread Xrandr Xi dl ${OPENGL_LIB} ${COCOA_LIB} ${IOKIT_LIB} ${COREFOUNDATION_LIB} ${COREVIDEO_LIB})總結
以上是生活随笔為你收集整理的.so 依赖目录 cmake_CMake 的研究与学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 口袋操作系统_可以装进口袋的主机要有多小
- 下一篇: python语句块标记_Python简单