示例CMakeLists.txt
。
#1 设置cmake版本
cmake_minimum_required( VERSION 3.9 )
#2 设置项目名称
project(test)
# 1.3 编译模式
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
ENDIF()
# 1.4 Check C++11 or C++0x support
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()
#4 设置交叉编译环境
if(0)
#4.1 设置目标平台系统
set(CMAKE_SYSTEM_NAME Linux)
#4.2 设置交叉编译库路径
set(CMAKE_FIND_ROOT_PATH
/home/noch/tools/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/lib
/home/noch/tools/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/include
/home/noch/tools/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)#只在交叉编译库路径中寻找
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#4.3 设置交叉编译器
set(CMAKE_C_COMPILER /home/noch/tools/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /home/noch/tools/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-g++)
set(CMAKE_C_EXTENSIONS "-pipe -g -Wall -W -fPIE")
set(CMAKE_CXX_EXTENSIONS "-pipe -g -Wall -W -fPIE")
endif()
#5 包含头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR})
#6 包含源文件
aux_source_directory(${PROJECT_SOURCE_DIR} SOURCE)
#7 设置链接库
set(LIBS pthread)
#7.1 设置库路径
# set(LINK_DIR $ENV{HOME}/lib64)
# link_directories(${LINK_DIR})
#8 将项目编译成可执行程序
add_executable(${PROJECT_NAME} ${SOURCE})
#8.1 将项目编译成.so文件(共享库)
# add_library(${PROJECT_NAME} SHARED ${SOURCE})
#8.2 将项目变成.a文件(静态库)
# add_library(${PROJECT_NAME} STATIC ${SOURCE})
#9 链接库
target_link_libraries(${PROJECT_NAME} ${LIBS})