cmake笔记

发布于:2025-07-04 ⋅ 阅读:(12) ⋅ 点赞:(0)
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

静态库的输出路径


网站公告

今日签到

点亮在社区的每一天
去签到