最低CMake版本要求
cmake_minimum_required(VERSION 3.15)
project(AIApp LANGUAGES CXX)
C++标准设置
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
查找常用AI框架
# TensorFlow
find_package(TensorFlow REQUIRED)
# PyTorch
find_package(Torch REQUIRED)
# OpenCV
find_package(OpenCV REQUIRED)
使用FetchContent管理依赖
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.11.0
)
FetchContent_MakeAvailable(googletest)
使用vcpkg或conan
# vcpkg
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
# Conan
find_package(conan REQUIRED)
conan_cmake_run(
REQUIRES eigen/3.3.7
BASIC_SETUP
BUILD missing
)
编译器优化标志
if(CMAKE_BUILD_TYPE STREQUAL "Release")
add_compile_options(-O3 -march=native -ffast-math)
endif()
GPU加速支持
find_package(CUDA REQUIRED)
enable_language(CUDA)
set(CMAKE_CUDA_ARCHITECTURES "75") # 根据你的GPU架构调整
多线程支持
find_package(Threads REQUIRED)
target_link_libraries(your_target PRIVATE Threads::Threads)
子目录管理
add_subdirectory(src)
add_subdirectory(tests)
库目标定义
add_library(ai_utils STATIC
utils/preprocessing.cpp
utils/data_loader.cpp
)
target_include_directories(ai_utils PUBLIC include)
可执行文件
add_executable(ai_app main.cpp)
target_link_libraries(ai_app PRIVATE ai_utils ${TORCH_LIBRARIES} ${OpenCV_LIBS})
Google Test集成
enable_testing()
add_executable(ai_tests
tests/test_preprocessing.cpp
tests/test_models.cpp
)
target_link_libraries(ai_tests PRIVATE ai_utils gtest_main)
add_test(NAME ai_tests COMMAND ai_tests)
覆盖率报告
if(ENABLE_COVERAGE)
add_compile_options(--coverage)
add_link_options(--coverage)
endif()
安装规则
install(TARGETS ai_app
RUNTIME DESTINATION bin
)
install(DIRECTORY include/ DESTINATION include)
CPack配置
set(CPACK_PACKAGE_NAME "AIApp")
set(CPACK_PACKAGE_VERSION "1.0.0")
include(CPack)
条件编译
if(UNIX AND NOT APPLE)
# Linux特定设置
add_compile_definitions(LINUX)
endif()
检查系统功能
include(CheckFunctionExists)
check_function_exists(memalign HAVE_MEMALIGN)
调试信息
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_options(-g3 -O0)
endif()
打印变量
message(STATUS "OpenCV libraries: ${OpenCV_LIBS}")
详细输出
cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
这些技巧可以帮助你更高效地使用CMake构建Linux环境下的人工智能应用程序,根据你的具体需求和技术栈进行适当调整。