别再混淆了!深入对比Hive、Spark SQL和MySQL中的时间戳函数(附性能测试)
2026/4/17 11:52:22
CMakeLists.txt 是 CMake 的配置文件,用于定义项目的构建规则、依赖关系、编译选项等。每个 CMake 项目通常有一个或多个 CMakeLists.txt 文件。
cmake_minimum_required(VERSION 3.10)project(MyProject CXX) # 项目名和语言add_executable(MyExecutable main.cpp other_file.cpp)# 静态库 add_library(MyLibrary STATIC library.cpp) # 动态库 add_library(MySharedLibrary SHARED library.cpp)target_link_libraries(MyExecutable MyLibrary)include_directories(${PROJECT_SOURCE_DIR}/include)set(CMAKE_CXX_STANDARD 11) set(MY_VAR "Hello World")target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include )install(TARGETS MyExecutable RUNTIME DESTINATION bin )if(CMAKE_BUILD_TYPE STREQUAL "Debug") message("Debug build") else() message("Release build") endif()add_custom_command( TARGET MyExecutable POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Build completed." )cmake_minimum_required(VERSION 3.10) project(MyProject CXX) # 添加可执行文件 add_executable(MyExecutable main.cpp) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 11)set(MY_VAR "Hello World") message(STATUS "Variable is ${MY_VAR}")set(MY_CACHE_VAR "DefaultValue" CACHE STRING "A cache variable" )# 基本查找 find_package(Boost REQUIRED) # 指定版本 find_package(Boost 1.70 REQUIRED) # 指定路径 find_package(OpenCV REQUIRED PATHS /path/to/opencv)target_link_libraries(MyExecutable Boost::Boost) # 传统方式(不推荐) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS})cmake_minimum_required(VERSION 3.10) project(MyProject CXX) # 查找 Boost 库 find_package(Boost REQUIRED) # 创建可执行文件 add_executable(MyExecutable main.cpp) # 链接 Boost 库 target_link_libraries(MyExecutable Boost::Boost)| 特性 | include_directories() | target_include_directories() |
|---|---|---|
| 作用范围 | 全局,影响所有目标 | 仅作用于指定目标 |
| 现代 CMake 推荐 | ❌ 不推荐 | ✅ 推荐使用 |
| 可维护性 | 较差,易污染全局 | 较好,逻辑清晰 |
| 作用域控制 | 无法精确控制 | 支持 PUBLIC/PRIVATE/INTERFACE |
| 目标关联性 | 不关联特定目标 | 显式关联特定目标 |
target_include_directories()include_directories()(除非遗留项目)# ❌ 传统方式(不推荐) include_directories(include) # ✅ 现代方式(推荐) target_include_directories(MyTarget PUBLIC include # 使用者也需要 PRIVATE src # 仅内部需要 INTERFACE . # 接口需要 )cmake_minimum_requiredproject()定义项目名和语言target_xxx()系列命令