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})