CMake 案例

单个源文件

  

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.11)

# 项目信息
project (Demo)

# 指定生成目标
add_executable(Demo main.cc)

cmake_minimum_required指定运行此配置文件所需的 CMake 的最低版本;

project参数值是 Demo,该命令表示项目的名称是 Demo。

add_executable 将名为 main.cc 的源文件编译成一个名称为 Demo 的可执行文件

同一目录,多个源文件

  

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.11)

# 项目信息
project (Demo)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(Demo ${DIR_SRCS})
#或者:add_executable(Demo main.cc math_function.cc math_function.h)

 aux_source_directory: 查找指定目录下的所有源文件,然后将结果存进指定变量名.

多个目录,多个源文件

  

  • Demo目录下的CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.11)

# 项目信息
project (Demo)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 添加 math 子目录
add_subdirectory(math)

# 指定生成目标
add_executable(Demo ${DIR_SRCS})

# 添加链接库
target_link_libraries(Demo MathFunctions)
  • math目录下的CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

# 生成链接库,库名为MathFunctions
add_library (MathFunctions ${DIR_LIB_SRCS})

add_subdirectory指明本项目包含一个子目录 math,这样math目录下的文件才会被处理 

target_link_libraries指明可执行文件 main 需要连接一个名为 MathFunctions 的链接库。

Notepad案例

  

  • ./Notepad/CMakeLists.txt
cmake_minimum_required(VERSION 3.11)

PROJECT (Notepad)

# Require "qa" and "xml" for debug report.
if(MSVC)
    find_package(wxWidgets REQUIRED COMPONENTS core base qa xml)
else()
    # Require "net" for create server/client between two instances.
    find_package(wxWidgets REQUIRED COMPONENTS core base net qa xml)
endif()

include(${wxWidgets_USE_FILE})

set(Boost_USE_STATIC_LIBS ON)

find_package(Boost)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
endif()

include_directories(${PROJECT_SOURCE_DIR}/src)

add_subdirectory(src)
  • ./Notepad/src/CMakeLists.txt
add_subdirectory(notepad)
  • ./Notepad/src/notepad/CMakeLists.txt
aux_source_directory(. DIR_SRCS)

set(TARGET_NAME notepad)

add_executable(${TARGET_NAME} WIN32 ${DIR_SRCS})

target_link_libraries(${TARGET_NAME} ${wxWidgets_LIBRARIES})
posted @ 2018-06-06 14:54  KeepInYourMind  阅读(411)  评论(0编辑  收藏  举报