C++ Caffe Project 代碼-立哥開發

cmake_minimum_required(VERSION 2.8.7)
if(POLICY CMP0046)
cmake_policy(SET CMP0046 NEW)
endif()
if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()

project(Caffe C CXX)

set(CAFFE_TARGET_VERSION “1.0.0” CACHE STRING “Caffe logical version”)
set(CAFFE_TARGET_SOVERSION “1.0.0” CACHE STRING “Caffe soname version”)
add_definitions(-DCAFFE_VERSION=${CAFFE_TARGET_VERSION})

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)

include(ExternalProject)
include(GNUInstallDirs)

include(cmake/Utils.cmake)
include(cmake/Targets.cmake)
include(cmake/Misc.cmake)
include(cmake/Summary.cmake)
include(cmake/ConfigGen.cmake)

—[ Options

caffe_option(CPU_ONLY “Build Caffe without CUDA support” OFF) # TODO: rename to USE_CUDA
caffe_option(USE_CUDNN “Build Caffe with cuDNN library support” ON IF NOT CPU_ONLY)
caffe_option(USE_NCCL “Build Caffe with NCCL library support” OFF)
caffe_option(BUILD_SHARED_LIBS “Build shared libraries” ON)
caffe_option(BUILD_python “Build Python wrapper” ON)
set(python_version “2” CACHE STRING “Specify which Python version to use”)
caffe_option(BUILD_matlab “Build Matlab wrapper” OFF IF UNIX OR APPLE)
caffe_option(BUILD_docs “Build documentation” ON IF UNIX OR APPLE)
caffe_option(BUILD_python_layer “Build the Caffe Python layer” ON)
caffe_option(USE_OPENCV “Build with OpenCV support” ON)
caffe_option(USE_LEVELDB “Build with levelDB” ON)
caffe_option(USE_LMDB “Build with lmdb” ON)
caffe_option(ALLOW_LMDB_NOLOCK “Allow MDB_NOLOCK when reading LMDB files (only if necessary)” OFF)
caffe_option(USE_OPENMP “Link with OpenMP (when your BLAS wants OpenMP and you get linker errors)” OFF)

—[ Dependencies

include(cmake/Dependencies.cmake)

—[ Flags

if(UNIX OR APPLE)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -fPIC -Wall”)
endif()

caffe_set_caffe_link()

if(USE_libstdcpp)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -stdlib=libstdc++”)
message("-- Warning: forcing libstdc++ (controlled by USE_libstdcpp option in cmake)")
endif()

—[ Warnings

caffe_warnings_disable(CMAKE_CXX_FLAGS -Wno-sign-compare -Wno-uninitialized)

—[ Config generation

configure_file(cmake/Templates/caffe_config.h.in “${PROJECT_BINARY_DIR}/caffe_config.h”)

—[ Includes

set(Caffe_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(Caffe_SRC_DIR PROJECTSOURCEDIR/src)includedirectories({PROJECT_SOURCE_DIR}/src) include_directories({PROJECT_BINARY_DIR})

—[ Includes & defines for CUDA

cuda_compile() does not have per-call dependencies or include pathes

(cuda_compile() has per-call flags, but we set them here too for clarity)

list(REMOVE_ITEM …) invocations remove PRIVATE and PUBLIC keywords from collected definitions and include pathes

if(HAVE_CUDA)

pass include pathes to cuda_include_directories()

set(Caffe_ALL_INCLUDE_DIRS CaffeINCLUDEDIRS)list(REMOVEITEMCaffeALLINCLUDEDIRSPRIVATEPUBLIC)cudaincludedirectories({Caffe_INCLUDE_DIRS}) list(REMOVE_ITEM Caffe_ALL_INCLUDE_DIRS PRIVATE PUBLIC) cuda_include_directories({Caffe_INCLUDE_DIR} ${Caffe_SRC_DIR} ${Caffe_ALL_INCLUDE_DIRS})

add definitions to nvcc flags directly

set(Caffe_ALL_DEFINITIONS ${Caffe_DEFINITIONS})
list(REMOVE_ITEM Caffe_ALL_DEFINITIONS PRIVATE PUBLIC)
list(APPEND CUDA_NVCC_FLAGS ${Caffe_ALL_DEFINITIONS})
endif()

—[ Subdirectories

add_subdirectory(src/gtest)
add_subdirectory(src/caffe)
add_subdirectory(tools)
add_subdirectory(examples)
add_subdirectory(python)
add_subdirectory(matlab)
add_subdirectory(docs)

—[ Linter target

add_custom_target(lint COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/lint.cmake)

—[ pytest target

if(BUILD_python)
add_custom_target(pytest COMMAND python${python_version} -m unittest discover -s caffe/test WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python )
add_dependencies(pytest pycaffe)
endif()

—[ uninstall target

configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake
IMMEDIATE @ONLY)

add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake)

caffe_print_configuration_summary()

caffe_generate_export_configs()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章