CMake整理

发布于:2024-04-26 ⋅ 阅读:(29) ⋅ 点赞:(0)

1、变量

CMAKE_CURRENT_BINARY_DIR

指向当前处理的 CMakeLists.txt 文件对应的构建目录。对于多级目录结构的项目,每个目录的这个变量指向的都是它自己的构建目录

CMAKE_SOURCE_DIR

指向最顶层 CMakeLists.txt 文件的源码目录,即整个项目的根源码目录。在所有的 CMakeLists.txt 文件中保持不变,无论它们在源码树的何处。

PROJECT_SOURCE_DIR

指向最近通过 project() 命令定义的项目的根源码目录。如果是单个项目,则与 CMAKE_SOURCE_DIR 相同。在使用 add_subdirectory 命令嵌套项目时,对于每个子项目来说,它指向的是各自的根源码目录

2、设置源文件和头文件

源文件

aux_source_directory(. SRC_LIST) #这里 . 表示当前目录,SRC_LIST 是存放源文件列表的变量

file(GLOB SRC_LIST "src/*.cpp") # 这里file(GLOB ...)命令来查找src目录下所有扩展名为.cpp的文件,并将它们的名字存入SRC_LIST变量

add_subdirectory(src) #进入子目录

头文件

include_directories(

${TOP_DIR}/Include

${TOP_DIR}/Src

)

3、编译库和进程

SET(EXECUTABLE_OUTPUT_PATH ${TOP_DIR}/Bin/$${PLATFORM}) ###设置可执行程序生成路径

SET(LIBRARY_OUTPUT_PATH ${TOP_DIR}/Lib/$${PLATFORM}) #####设置库生成路径

#########设置库属性 源文件和输出名字

set(STATIC_LIB ${PROJECT_NAME}_static)

add_library(${STATIC_LIB} STATIC ${LIB_SRC})

set_target_properties(${STATIC_LIB} PROPERTIES OUTPUT_NAME ${LIB_NAME})

编译选项相关

set(CMAKE_SYSTEM_NAME LINUX)

set(CMAKE_C_COMPILER "gcc")

set(CMAKE_CXX_COMPILER "g++")

set(CMAKE_C_FLAGS "xxx")

set(CMAKE_CXX_FLAGS "xxx")

add_compile_options(-std=c++11 -g) ##增加编译选项

add_definitions(-DXXX) ### 添加宏

调试

message("-----  PLAT=${PLAT}")

示例

SET(CMAKE_SYSTEM_NAME LINUX)

SET(CMAKE_C_COMPILER "gcc")
SET(CMAKE_CXX_COMPILER "g++")

SET(CMAKE_C_FLAGS "xxxx")
SET(CMAKE_CXX_FLAGS "xxxx")

CMAKE_MINIMUM_REQUIRED (VERSION 2.8)

PROJECT(test)

SET(TOP_DIR ${PROJECT_SOURCE_DIR})

message("-----  PLAT=${PLAT}")

if(PLAT STREQUAL "")
    SET(PLAT "x86")
endif()

if(PLAT STREQUAL "x86")
    SET(CROSS_FILE ${TOP_DIR}/configs/gcc.cmake)
elseif(PLAT STREQUAL nt98632)
    SET(CROSS_FILE ${TOP_DIR}/configs/nt98632.cmake)
elseif(PLAT STREQUAL win64)
    SET(CROSS_FILE ${TOP_DIR}/configs/win64.cmake)
else()
    SET(CROSS_FILE ${TOP_DIR}/configs/gcc.cmake)
endif()

####
INCLUDE(${CROSS_FILE})

####
INCLUDE_DIRECTORIES(${TOP_DIR}/src/func)

#####
AUX_SOURCE_DIRECTORY(${TOP_DIR}/src SRC_LIST)
AUX_SOURCE_DIRECTORY(${TOP_DIR}/src/func SRC_LIST)

ADD_COMPILE_OPTIONS(-std=c++11 -g)

ADD_EXECUTABLE(test_bin ${SRC_LIST})

IF (CMAKE_SYSTEM_NAME MATCHES "WINDOWS")
	
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "LINUX")
    TARGET_LINK_LIBRARIES(test_bin pthread dl)
ENDIF ()