单个c文件构建
cmake_minimum_required(VERSION 3.20) project(Hello) add_executable(Hello Hello.c)
cmake_minimum_required设置cmake的最小版本要求,写上比较稳妥。
project设置项目名称。
add_executable构建可执行文件。
通常我们在顶层CMakeLists.txt上建立一个文件夹build,是使用 out-of-source 方式,构建在build文件夹下执行命令cmake ..,make.
2.如果有多个源文件的情况下
其中mian.c需要用到hello.c里面的函数
project(HELLO)set(SRC_LIST main.c hello.c)add_executable(hello ${SRC_LIST})
add_executable(hello main.c hello.c)
也可以使用这个命令
file(GLOB_RECURSE MODULE_COMMON_SRC ./*.c)
也可以使用这个命令
aux_source_directory(./ MODULE_COMMON_SRC )
这条语句的作用是在当前目录及其子目录中递归地搜索所有的.c
文件,并将搜索到的文件路径列表存储在MODULE_COMMON_SRC
变量中。
最后
add_executable(hello ${MODULE_COMMON_SRC})
3.生成库文件
project(HELLO)add_library(libhello hello.c)add_executable(hello main.c)target_link_libraries(hello libhello)
add_library(libhello SHARED hello.c) #生成动态库文件add_library(libhello STATIC hello.c) #生成静态库文件
target_link_libraries 命令为目标指定依赖库,在本例中,hello.c 被编译为库文件,并将其链接进 hello 程序。
修改生成的库文件名字
add_library(hello hello.c)
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
cmake_minimum_required(VERSION 3.5)project(HELLO)add_library(libhello SHARED hello.c)set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")add_executable(hello main.c)target_link_libraries(hello libhello)
示例四:将源文件组织到不同的目录
顶层 CMakeLists.txt
cmake_minimum_required(VERSION 3.5)project(HELLO)add_subdirectory(libhello)add_subdirectory(src)
src 目录下的 CMakeLists.txt
include_directories(${PROJECT_SOURCE_DIR}/libhello)add_executable(hello main.c)target_link_libraries(hello libhello)
上述使用这个命令也行
include_directories(${CMAKE_CURRENT_LIST_DIR})
libhello 目录下的 CMakeLists.txt
add_library(libhello hello.c)set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
示例五:将生成的可执行文件和库文件放置到单独的目录下

include_directories(${PROJECT_SOURCE_DIR}/libhello)set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)add_executable(hello main.c)target_link_libraries(hello libhello)
然后再对 libhello 目录下的 CMakeList.txt 文件进行修改,如下所示:
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)add_library(libhello hello.c)set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")

也可以这样设置
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
以上不行的话可能是版本问题,换一种变量即可。