链接:小黑屋1024 / Python · GitCode
#对cmake版本的要求,此处不低于3.16
cmake_minimum_required(VERSION 3.16)#项目名称:此处为test
project(test)#设置编译生成产物输出路径
##可执行文件exe
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
##dll
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
##lib
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
##设置C++标准
#SET(CMAKE_CXX_STANDARD 11)
#SET(CMAKE_CXX_STANDARD_REQUIRED 11)#设置Qt属性
#set(CMAKE_AUTOUIC ON)
#set(CMAKE_AUTOMOC ON)
#set(CMAKE_AUTORCC ON)#打包所有源文件
file(GLOB SOURCES "src/*.*")
#基于上面的sources过滤不要的文件
#file(GLOB_RECURSE REMOVE_SOURCES "src/notuse.cpp")
#list(REMOVE_ITEM SOURCES ${REMOVE_SOURCES})
##产物生成
##生成可执行文件
add_executable(${PROJECT_NAME} ${SOURCES})
##生成动态库
##保证没有导出符号也生成lib文件
#set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
#add_library(${PROJECT_NAME} SHARED ${SOURCES})
##生成静态库
#add_library(${PROJECT_NAME} STATIC ${SOURCES})
##库链接
#target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/externals/include)
#target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/externals/lib/libtest.so)
##产物打包install
##安装产物
# install(TARGETS ${PROJECT_NAME}
# CONFIGURATIONS Release
# ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/install/Release
# LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/install/Release
# RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/install/Release
# CONFIGURATIONS Debug
# RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/install/Debug
# ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/install/Debug
# LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/install/Debug)##安装指定文件
# install(FILES ${PROJECT_SOURCE_DIR}/src/install.h
# DESTINATION ${PROJECT_SOURCE_DIR}/install/include)##安装目录,并过滤文件,支持正则和通配
###局部匹配,表示src/installDir下所有文件名包含install的文件
# install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/installDir DESTINATION ${PROJECT_SOURCE_DIR}/install/include/
# FILES_MATCHING REGEX "test")
###完全匹配,表示src/installDir下所有文件名包含install的文件
# install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/installDir DESTINATION ${PROJECT_SOURCE_DIR}/install/include/
# FILES_MATCHING PATTERN "otherfile.h")
#
介绍
这是一个基于CMakeLists.txt创建的C++模板项目。
它提供了固定的目录结构:
src目录存放源码
externals目录存放依赖(库),
bin目录存放生成的产物
install目录存放打包安装内容
通过clone这个项目,可以快速的使用CMakeLists.txt文件,选择与项目相关的配置(默认提供最简单的可执行文件所需要的CMake配置),从而快速开始代码编辑,而不是到处寻找cmake命令
目前支持的cmake内容有:
1.项目名(project)
2.cmake版本要求(cmake_minimum_version)
3.生成产物(add_executable、add_library)
4.源文件打包及过滤(file)
5.生成产物路径设置(EXECUTABLE_OUTPUT_PATH、CMAKE_RUNTIME_OUTPUT_DIRECTORY、CMAKE_LIBRARY_OUTPUT_DIRECTORY、CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
6.产物安装(target、指定文件FILES、指定目录DIRECTORY)
7.链接动/静态库
8.C++标准选择
9.Qt属性设置
当然,有时间的话还会继续完善其他复杂的功能,比如版本号、导出等,同时,如果你有兴趣的话,欢迎你的pr。
如何使用
1.首先,这是一个模板,src里的内容可以完全忽略,也就是说如果你配置好你的Cmake内容的话,可以将src的文件清空,并开始创建自己的源文件。
2.完成源码编写后,可以在根目录下使用:
cmake -B build -S .
命令创建项目目录和项目文件,然后切到build目录下执行:
cmake --build . [--config=Release/Debug]
进行构建,其中[--config=Release/Debug]表示配置构建的版本,可以省略。
3.最后,如果一切顺利的话,你可以在bin目录下看到你的构建产物。