一个简单的cmake模板(C++)

链接:小黑屋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目录下看到你的构建产物。

你可能感兴趣的:(cmake,cmake)