cmake_minimum_required (VERSION 2.8)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project (demo)
aux_source_directory(. SRC_LIST)#扫描.下的所有c\cpp文件并生成list放进SRC_LIST
#等效于set( SRC_LIST ./main.c ./testFunc1.c ./testFunc.c)
include_directories (test_func test_func1)#添加多个指定头文件的搜索路径
aux_source_directory (test_func SRC_LIST)#添加目录test_func下的C\CPP文件
aux_source_directory (test_func1 SRC_LIST1)
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
#指定一个包含CMakeLists.txt和代码文件所在的目录
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#EXECUTABLE_OUTPUT_PATH是默认常量,把二进制文件放到根目录下的bin中
find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)
#在指定目录下找库,并把库的绝对路径放到变量里
#参1是保存到的变量;参2是要找的库名称,不包含前缀和扩展名;参3告诉优先在后面的目录找库,而不是环境变量,如果改成PATH则优先在环境变量里找
target_link_libraries (main ${TESTFUNC_LIB})#把目标文件与库进行链接
add_executable(main ${SRC_LIST} ${SRC_LIST1})
#以下是生成库文件,不生成可执行文件
cmake_minimum_required (VERSION 3.5)
project (demo)
set (SRC_LIST ${PROJECT_SOURCE_DIR}/testFunc/testFunc.c)
add_library (testFunc_shared SHARED ${SRC_LIST})#库名称 动态
add_library (testFunc_static STATIC ${SRC_LIST})
set_target_properties (testFunc_shared PROPERTIES OUTPUT_NAME "testFunc")
set_target_properties (testFunc_static PROPERTIES OUTPUT_NAME "testFunc")
#set_target_properties: 设置最终生成的库的名称,还有其它功能,如设置库的版本号等
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)#库输出路径,根目录下lib
常见的 CMake 编译控制变量
变量名 |
含义 |
CMAKE_CXX_STANDARD |
设置 C++ 编译标准(如 11、14、17、20) |
CMAKE_CXX_STANDARD_REQUIRED |
是否强制使用该标准(ON 推荐) |
CMAKE_CXX_EXTENSIONS |
是否启用 GNU 扩展(ON 为 -std=gnu++17,OFF 为 -std=c++17) |
CMAKE_C_STANDARD |
设置 C 编译标准(如 99、11) |
CMAKE_C_STANDARD_REQUIRED |
是否强制使用该 C 标准 |
CMAKE_POSITION_INDEPENDENT_CODE |
为目标编译为 PIC(常用于构建共享库) |
CMAKE_BUILD_TYPE |
构建类型(如 Debug、Release) |
CMAKE_RUNTIME_OUTPUT_DIRECTORY |
可执行文件的输出路径 |
CMAKE_LIBRARY_OUTPUT_DIRECTORY |
动态库的输出路径 |
CMAKE_ARCHIVE_OUTPUT_DIRECTORY |
静态库的输出路径 |