1、单个文件的编译规则
#指定最低版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo1)
#工程根目录(即为CMakeLists.txt文件所在目录)
message("PROJECT_SOURCE_DIR : " ${PROJECT_SOURCE_DIR})
#编译目录(即为执行cmake的目录)
message("PROJECT_BINARY_DIR : " ${PROJECT_BINARY_DIR})
#编译环境
IF (WIN32)
message("this is windows")
ELSEIF (UNIX)
message("this is UNIX")
ELSE ()
message("unknow..")
ENDIF (WIN32)
#生成可执行文件
add_executable(res main.c)
目录结构
2、 多个文件编译规则
#指定版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo2)
#设置变量的值
set(SRC ${PROJECT_SOURCE_DIR}/src/main.cpp
${PROJECT_SOURCE_DIR}/src/mymath.cpp)
#指定头文件位置
include_directories(${PROJECT_SOURCE_DIR}/include)
#指定可执行文件生成路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#生成可执行文件
add_executable(res ${SRC})
目录结构
3、需要链接动态库时的编译规则
#指定版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo5)
#设置变量的值
set(SRC ${PROJECT_SOURCE_DIR}/src/main.cpp)
set(SRC_LIB ${PROJECT_SOURCE_DIR}/lib/libmyMath.so)
#指定头文件位置
include_directories(${PROJECT_SOURCE_DIR}/include)
#指定可执行文件生成路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#生成可执行文件
add_executable(demo5 ${SRC})
#添加链接库
target_link_libraries(demo5 ${SRC_LIB})
目录结构
4、多层目录下编译规则
4.1、最外层cmake
#指定版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo4)
#添加子目录
add_subdirectory(${PROJECT_SOURCE_DIR}/src1)
add_subdirectory(${PROJECT_SOURCE_DIR}/src2)
4.2、子目录1下cmake
#指定版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo4.1)
#设置变量的值
set(SRC ${PROJECT_SOURCE_DIR}/main1.cpp)
#指定可执行文件生成路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#生成可执行文件
add_executable(demo4.1 ${SRC})
4.3、子目录2下cmake
#指定版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo4.2)
#设置变量的值
set(SRC ${PROJECT_SOURCE_DIR}/main2.cpp)
#指定可执行文件生成路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#生成可执行文件
add_executable(demo4.2 ${SRC})
目录结构
5、使用cmake生成库文件
#指定版本
cmake_minimum_required(VERSION 3.16)
#指定工程名称
project(demo5)
#设置变量的值
set(SRC ${PROJECT_SOURCE_DIR}/src/myAdd.cpp
${PROJECT_SOURCE_DIR}/src/myMinus.cpp)
#指定头文件位置
include_directories(${PROJECT_SOURCE_DIR}/include)
#指定可执行文件生成路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
#生成库文件
#生成静态库
#add_library(myMath STATIC ${SRC})
#生成动态库
add_library(myMath SHARED ${SRC})
目录结构