CMakeLists模板
常用的项目文件CMakeLists.txt
模板如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 cmake_minimum_required (VERSION 3.10 )project (PROJECT_NAME)IF (NOT CMAKE_BUILD_TYPE) SET (CMAKE_BUILD_TYPE RELEASE) ENDIF ()if ( CMAKE_BUILD_TYPE MATCHES DEBUG ) message ("Debug mode" ) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -msse3 -std=c++11 -pthread -O0 -g -march=native -Wno-deprecated-declarations" ) set (TYPE debug) else ( CMAKE_BUILD_TYPE MATCHES RELEASE ) message ("Release mode" ) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -msse3 -std=c++11 -pthread -O2 -march=native -Wno-deprecated-declarations -Wno-deprecated" ) set (TYPE release) endif ( CMAKE_BUILD_TYPE MATCHES DEBUG ) MESSAGE ("Build type: " ${CMAKE_BUILD_TYPE} )set (CMAKE_EXPORT_COMPILE_COMMANDS ON ) include (CheckCXXCompilerFlag)CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if (COMPILER_SUPPORTS_CXX11) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" ) add_definitions (-DCOMPILEDWITHC11) message (STATUS "Using flag -std=c++11." ) elseif (COMPILER_SUPPORTS_CXX0X) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" ) add_definitions (-DCOMPILEDWITHC0X) message (STATUS "Using flag -std=c++0x." ) else () message (FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler." ) endif ()LIST (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR} /cmake_modules)find_package (YOUR_PKG REQUIRED)set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib)set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/${TYPE} )aux_source_directory (${PROJECT_SOURCE_DIR} /src LIB_SRC)add_library (${PROJECT_NAME} _lib SHARED ${LIB_SRC} ) target_link_libraries (${PROJECT_NAME} _lib ${YOUR_PKG_LIBS} ) add_executable (BIN_NAME SOURCE_FILE.cc)target_link_libraries (BIN_NAME ${PROJECT_NAME} _lib)
禁用内部构建PreventInSourceBuild.cmake
:
1 2 3 4 5 6 7 8 9 10 11 function (prevent_in_source_build) get_filename_component (src_dir "${CMAKE_SOURCE_DIR}" REALPATH) get_filename_component (bin_dir "${CMAKE_BINARY_DIR}" REALPATH) if ("${src_dir}" STREQUAL "${bin_dir}" ) message (FATAL_ERROR "In-source builds are not allowed." ) endif () endfunction (prevent_in_source_build)message (STATUS "prevent_in_source_build.cmake loaded." )prevent_in_source_build()
将项目内部安装库添加到路径中SetupDependencies.cmake
:
1 2 3 4 message (STATUS "Setting up dependencies..." )list (PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake/modules" )list (PREPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_LIST_DIR}/../install" )