YOLOv10模型支持知识蒸馏,学生模型可在低配GPU运行
2025/12/28 18:41:19
project()是 CMake 中最基础和最重要的命令之一,用于定义项目的基本属性和配置。
project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [DESCRIPTION <project-description-string>] [HOMEPAGE_URL <url-string>] [LANGUAGES <language-name>...] )<PROJECT-NAME>PROJECT_NAME<PROJECT-NAME>_SOURCE_DIR和<PROJECT-NAME>_BINARY_DIRCMAKE_PROJECT_NAMEproject(MyApp) message("项目名称: ${PROJECT_NAME}") # 输出: MyApp message("项目源目录: ${MyApp_SOURCE_DIR}") # 输出: 当前源目录VERSION(CMake 3.0+)主版本.次版本.修订号.构建号project(MyApp VERSION 2.1.3.4) # 生成的变量: ${PROJECT_VERSION} # "2.1.3.4" ${PROJECT_VERSION_MAJOR} # "2" ${PROJECT_VERSION_MINOR} # "1" ${PROJECT_VERSION_PATCH} # "3" ${PROJECT_VERSION_TWEAK} # "4" ${MyApp_VERSION} # "2.1.3.4" (项目前缀版本) # 预定义变量也会被设置: ${CMAKE_PROJECT_VERSION} # "2.1.3.4"project(MyLib VERSION 1.0.0) # 生成版本头文件 configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h ) # 在代码中使用版本信息 target_compile_definitions(mylib PRIVATE VERSION_MAJOR=${PROJECT_VERSION_MAJOR} VERSION_MINOR=${PROJECT_VERSION_MINOR} )DESCRIPTION(CMake 3.9+)project(MyApp VERSION 1.0.0 DESCRIPTION "一个跨平台的图像处理应用程序" ) message("项目描述: ${PROJECT_DESCRIPTION}")HOMEPAGE_URL(CMake 3.12+)project(MyLib VERSION 2.3.1 HOMEPAGE_URL "https://github.com/username/mylib" ) message("项目主页: ${PROJECT_HOMEPAGE_URL}")LANGUAGESC,CXX(C++),CUDA,OBJC,OBJCXX,Fortran,ASM,Swift等CMAKE_CXX_STANDARD)enable_language()的行为# 单语言项目 project(MyCApp LANGUAGES C) # 多语言项目 project(MyMixedApp LANGUAGES C CXX Fortran) # 如果不指定 LANGUAGES,默认启用 C 和 CXX project(MyDefaultApp) # 默认包含 C 和 CXXproject()命令的重要作用project()命令创建一个新的项目作用域project()设置的重要变量:
| 变量 | 说明 | 示例 |
|---|---|---|
PROJECT_NAME | 当前项目名称 | “MyApp” |
PROJECT_VERSION | 完整版本号 | “1.2.3” |
CMAKE_PROJECT_NAME | 顶级项目名称 | 第一个 project() 的名称 |
PROJECT_SOURCE_DIR | 项目源目录 | /path/to/source |
PROJECT_BINARY_DIR | 项目构建目录 | /path/to/build |
<PROJECT-NAME>_SOURCE_DIR | 带项目名前缀的源目录 | |
<PROJECT-NAME>_BINARY_DIR | 带项目名前缀的构建目录 |
project(MyCXXApp LANGUAGES CXX) # 现在可以使用 C++ 相关变量 message("C++ 编译器: ${CMAKE_CXX_COMPILER}") message("C++ 标志: ${CMAKE_CXX_FLAGS}") # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)cmake_minimum_required()project()必须在cmake_minimum_required()之后调用# 正确顺序 cmake_minimum_required(VERSION 3.10) project(MyApp VERSION 1.0) # 错误顺序 - 会导致警告或错误 project(MyApp) # 错误:需要先调用 cmake_minimum_required cmake_minimum_required(VERSION 3.10)cmake_minimum_required(VERSION 3.14) project(ImageProcessor VERSION 3.2.1 DESCRIPTION "专业的图像处理工具" HOMEPAGE_URL "https://github.com/company/image-processor" LANGUAGES CXX ) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # 输出项目信息 message(STATUS "========================================") message(STATUS "项目: ${PROJECT_NAME}") message(STATUS "版本: ${PROJECT_VERSION}") message(STATUS "描述: ${PROJECT_DESCRIPTION}") message(STATUS "主页: ${PROJECT_HOMEPAGE_URL}") message(STATUS "源目录: ${PROJECT_SOURCE_DIR}") message(STATUS "构建目录: ${PROJECT_BINARY_DIR}") message(STATUS "========================================")cmake_minimum_required(VERSION 3.10) project(MyFramework VERSION 4.5.0 LANGUAGES CXX) # 创建配置模板文件 version.h.in # 内容示例: # #define MYFRAMEWORK_VERSION_MAJOR @PROJECT_VERSION_MAJOR@ # #define MYFRAMEWORK_VERSION_MINOR @PROJECT_VERSION_MINOR@ # #define MYFRAMEWORK_VERSION_PATCH @PROJECT_VERSION_PATCH@ # #define MYFRAMEWORK_VERSION "@PROJECT_VERSION@" configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/version.h.in" "${CMAKE_CURRENT_BINARY_DIR}/version.h" @ONLY ) # 添加生成的头文件到包含路径 target_include_directories(mylib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<INSTALL_INTERFACE:include> )cmake_minimum_required(VERSION 3.15) # 顶级项目(工作区) project(MyWorkspace VERSION 1.0.0 LANGUAGES CXX) # 启用子目录 add_subdirectory(lib) # 库项目 add_subdirectory(app) # 应用程序项目 add_subdirectory(tests) # 测试项目 # 在工作区级别设置通用选项 option(BUILD_SHARED_LIBS "构建共享库" ON) option(ENABLE_TESTS "启用测试" ON) # 设置输出目录 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)cmake_minimum_required(VERSION 3.16) # 检查 CUDA 支持 find_package(CUDA QUIET) if(CUDA_FOUND) project(MyGpuApp LANGUAGES CXX CUDA) message(STATUS "启用 CUDA 支持") else() project(MyCpuApp LANGUAGES CXX) message(STATUS "CUDA 未找到,仅使用 CPU") endif() # 根据语言设置不同的编译选项 if("CUDA" IN_LIST CMAKE_PROJECT_LANGUAGES) # CUDA 特定设置 set(CMAKE_CUDA_STANDARD 14) # ... endif()# 根据条件设置项目名称 if(USE_EXPERIMENTAL_FEATURES) set(PROJ_NAME "MyAppExperimental") else() set(PROJ_NAME "MyAppStable") endif() project(${PROJ_NAME} VERSION 2.0.0)# 从外部文件读取版本号 file(READ "${CMAKE_SOURCE_DIR}/VERSION.txt" VERSION_FILE) string(STRIP "${VERSION_FILE}" VERSION_STRING) # 验证版本格式 if(NOT VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+$") message(FATAL_ERROR "无效的版本格式: ${VERSION_STRING}") endif() project(MyApp VERSION ${VERSION_STRING})project(MyLib VERSION 3.1.0 LANGUAGES C) # 生成 .pc 文件 configure_file( "${CMAKE_SOURCE_DIR}/mylib.pc.in" "${CMAKE_BINARY_DIR}/mylib.pc" @ONLY ) # .pc.in 文件内容示例: # Name: @PROJECT_NAME@ # Description: @PROJECT_DESCRIPTION@ # Version: @PROJECT_VERSION@ # Libs: -L${libdir} -lmylib # Cflags: -I${includedir}project(MultiConfigApp VERSION 1.0 LANGUAGES CXX) # 根据配置设置不同的版本后缀 if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(VERSION_SUFFIX "-debug") elseif(CMAKE_BUILD_TYPE STREQUAL "Release") set(VERSION_SUFFIX "") else() set(VERSION_SUFFIX "-${CMAKE_BUILD_TYPE}") endif() set(FULL_VERSION "${PROJECT_VERSION}${VERSION_SUFFIX}") message(STATUS "完整版本: ${FULL_VERSION}")project()# 错误:在同一作用域多次调用 project() project(App1) project(App2) # 这会覆盖 App1 的设置 # 解决方案:使用不同的目录或作用域 add_subdirectory(app1) # app1/CMakeLists.txt 中有 project(App1) add_subdirectory(app2) # app2/CMakeLists.txt 中有 project(App2)# 如果项目只使用 C,但忘记指定 LANGUAGES C project(MyCProject) # 默认包含 C 和 CXX # 解决方案:明确指定语言 project(MyCProject LANGUAGES C)# 错误的版本号格式 project(MyApp VERSION "1.2.3-beta") # 包含非数字字符 # 解决方案:使用纯数字版本号,通过其他变量传递额外信息 project(MyApp VERSION 1.2.3) set(PROJECT_VERSION_SUFFIX "beta") set(FULL_VERSION_STRING "${PROJECT_VERSION}-${PROJECT_VERSION_SUFFIX}")project()之后设置语言标准:如 C++ 标准、C 标准等project()# 最佳实践示例 cmake_minimum_required(VERSION 3.14) project(ModernApp VERSION 2.5.0 DESCRIPTION "现代化应用程序示例" HOMEPAGE_URL "https://example.com" LANGUAGES CXX ) # 紧随 project() 设置语言标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)| 相关命令 | 关系说明 |
|---|---|
cmake_minimum_required() | 必须在project()之前调用 |
set() | 用于设置项目变量,但project()会覆盖某些设置 |
add_subdirectory() | 子目录可以有独立的project()调用 |
enable_language() | project(LANGUAGES ...)内部会调用此函数 |
通过合理使用project()命令,可以为 CMake 项目建立清晰的标识和配置基础,是构建健壮、可维护项目的关键第一步。