玩命加载中 . . .

cmake


CMake变量

CMAKE_CURRENT_SOURCE_DIR

  • 指的是当前处理的CMakeLists.txt所在的路径。

CMAKE_CURRRENT_BINARY_DIR

  • 如果是in-source编译,它跟CMAKE_CURRENT_SOURCE_DIR一致,如果是out-ofsource编译,他指的是target编译目录。

CMAKE_CURRENT_LIST_FILE

  • 输出调用这个变量的CMakeLists.txt的完整路径

文件目录

Solider目录的CMakeLists.txt

aux_source_directory(. SRC_LIST)
// 将此目录的源文件集合称为变量SRC_LIST

message(${SRC_LIST})

include_directories(${PROJECT_SOURCE_DIR}/include)
// 头文件目录

add_library(Solider_shared SHARED ${SRC_LIST})
// 库的名称,类型,源文件(动态库)

add_library(Solider_static STATIC ${SRC_LIST})
// 静态库

set_target_properties(Solider_shared PROPERTIES OUTPUT_NAME "Solider")
// 库的名称,库的输出名称(动态库)

set_target_properties(Solider_static PROPERTIES OUTPUT_NAME "Solider")
// 静态库

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
// 库文件输出到工作空间的lib目录下

工作空间的CMakeLists.txt (生成库文件)

cmake_minimum_required(VERSION 3.0)

project(MAIN)

// message(${MAIN_BINARY_DIR})
// message(${PROJECT_BINARY_DIR})
// message(${CMAKE_BINARY_DIR})

// 如果是out-of-source编译,指的是工程编译发生的目录 
// /home/kavin/algorithm/VSCode/test05/build

// message(${MAIN_SOURCE_DIR})
// message(${PROJECT_SOURCE_DIR})
// message(${CMAKE_SOURCE_DIR})

// 这三个变量指代的内容是一致的,是工程顶层目录 
// /home/kavin/algorithm/VSCode/test05

// 为了生成库文件,完成之后面再把这句注释掉
// 会进入Solider目录执行里里面的工作空间的CMakeLists.txt
add_subdirectory(Solider)

工作空间的CMakeLists.txt (编译源文件)

cmake_minimum_required(VERSION 3.0)

project(MAIN)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

set(CMAKE_BUILD_TYPE Debug)     // 要启用F5调试一定要用这一条

// 头文件目录
include_directories(${CMAKE_SOURCE_DIR}/include)

// 库文件目录
link_directories(lib)

// 生成可执行文件
add_executable(main main.cpp)

// 链接库(静态库)
target_link_libraries(main libSolider.a)

// 如果是动态库要记得添加环境变量 LD_LIBRARY_PATH=lib/

文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录