学网站建设专业前景,免费服务器的网站有哪些,金螳螂装饰公司,网站后台多个管理员目录 1、Cmake简介2、安装CMake3、CMakeLists.txt4、单目录简单实例4.1、CMakeLists.txt4.2、构建bulid内部构建外部构建 4.3、运行C语言程序 5、多目录文件简单实例5.1、根目录CMakeLists.txt5.2、源文件目录5.3、utils.h5.4、创建build 6、生成库文件和链接外部库文件7、注意… 目录 1、Cmake简介2、安装CMake3、CMakeLists.txt4、单目录简单实例4.1、CMakeLists.txt4.2、构建bulid内部构建外部构建 4.3、运行C语言程序 5、多目录文件简单实例5.1、根目录CMakeLists.txt5.2、源文件目录5.3、utils.h5.4、创建build 6、生成库文件和链接外部库文件7、注意 1、Cmake简介 CMake是一个强大的跨平台构建工具它能够自动生成用于构建项目的Makefile、Visual Studio项目文件或其他构建系统所需的文件。使用CMake可以更轻松地管理复杂的C语言项目使它们易于维护和跨平台。 如果对Makefile不了解可以看此文章→Makefile入门
2、安装CMake 首先需要安装CMake。在Linux设备可以使用sudo apt-get install cmake。或者从CMake官网下载适合操作系统的安装程序。安装完成后可以在终端中运行以下命令来检查CMake是否安装成功
cmake --version如果成功安装将看到CMake的版本信息。
3、CMakeLists.txt cmake的核心就是CMakeLists.txt文件注意CMakeLists.txt文件名严格区分大小写确保文件名准确无误告诉CMake如何构建项目。通过CMakeLists.txt可以决定工程文件生成二进制文件动态库静态库文件以及链接各种库文件十分灵活好用以下几种实例都会讲到。
4、单目录简单实例 一个工程目录下最简单需要编写一个CMakeLists.txt文件然后创建build文件在此文件内进行 cmake . . make编译此工程。如果多级目录也可以使用多级CMakeLists.txt用于分开管理。以下是一个简单的示例
4.1、CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
PROJECT (MyCProject)
# 设置编译选项加入-g可以gdb调试
SET(CMAKE_CXX_FLAGS -g)
SET(CMAKE_C_FLAGS -g)
# 添加源文件
file(GLOB SOURCES src/*.c)
# 添加头文件目录
#INCLUDE_DIRECTORIES(../include)
# 生成可执行文件
add_executable(src ${SOURCES}) 以上的CMakeLists.txt文件做了以下事情 CMakeLists.txt不区分函数名字母大小写一般一个函数都用大写或者都用小写**#**号用于注释语句cmake_minimum_required( )指定CMake的最低版本。PROJECT( ) 定义项目名称。SET(CMAKE_CXX_FLAGS “-g”)设置C语言标准,此外setA B函数还用于赋值将B赋予A。使用file()函数将所有在src/目录下的.c文件赋给变量SOURCES。使用include_directories()函数添加头文件目录。链接库文件路径LINK_LIBRARIES(xxxx.a xxxx.so)链接库文件LINK_DIRECTORIES(. ./lib/ . ./build/xxx.a . ./build/xxx.so)最后使用**add_executable()**函数生成可执行文件将源文件${SOURCES}执行生成src可执行程序。生成静态库文件 ADD_LIBRARY(xxx STATIC ${SRC_LIST})生成静态库文件xxx.a生成动态库 ADD_LIBRARY(xxx SHARED ${SRC_LIST})生成动态库文件xxx.so 4.2、构建bulid
内部构建 直接在项目目录下进行cmake 和 make 这会导致出现很多临时文件很不友好和美观
外部构建 在项目根目录 新建build文件 在此文件中进行cmake . . 和make隐藏不不要的临时文件便于其他操作。 例如在项目根目录下创建一个build/文件夹并在终端中进入该文件夹。然后运行以下命令
cmake ..这将使用根目录中的CMakeLists.txt文件来配置项目。接下来运行以下命令来编译项目
make这将生成可执行文件MyCProject可以在build/目录下找到它。
4.3、运行C语言程序 现在可以在终端中运行的C语言程序
./srcC语言程序应该正常运行了。
5、多目录文件简单实例 test-2/CMakeLists.txtsrc/CMakeLists.txtmain.cutils.cinclude/utils.hbuild/CMakeLists.txt 是CMake的配置文件用于告诉CMake如何构建项目。 -此工程为多个CMakeLists.txt文件每个CMakeLists.txt文件管理此目录下的源文件并且上级CMakeLists.txt可以递归管理子目录src/ 包含的C源代码文件。include/ 包含的头文件。build/ 是构建输出目录用于存放生成的可执行文件和中间文件可以按照自己的需求删除和手动创建。 5.1、根目录CMakeLists.txt
cmake_minimum_required(VERSION 3.16)PROJECT (ZPJ_TEST_1)SET(CMAKE_CXX_FLAGS -g)
SET(CMAKE_C_FLAGS -g)ADD_SUBDIRECTORY(./src ./bin)ADD_SUBDIRECTORY(./src ./bin) 将src路径下的CMakeLists.txt进行处理,并且将处理的结果放在bin下,如果是在build目录下cmake的,那么结果就会在build/bin/下 此语句可指定子目录的 相对路径或绝对路径可省略bin文件默认生成子目录同名文件放入生成的文件 5.2、源文件目录
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)file(GLOB SRC_LIST ./*.c)
include_directories(../include)ADD_EXECUTABLE(src ${SRC_LIST})src/main.c
#include stdio.h
#include utils.hint main() {printf(Hello, CMake!\n);int result add(2, 3);printf(2 3 %d\n, result);return 0;
}src/utils.c
#include utils.hint add(int a, int b) {return a b;
}5.3、utils.h
#ifndef UTILS_H
#define UTILS_Hint add(int a, int b);#endif5.4、创建build 运行cmake … 和 make命令将成功构建多文件C语言项目。
6、生成库文件和链接外部库文件
把上述例子目录结构改变为 然后更改每个CMakeLists.txt文件 按上图顺序依次为 根目录
cmake_minimum_required(VERSION 3.16)PROJECT (ZPJ_TEST_1)SET(CMAKE_CXX_FLAGS -g)
SET(CMAKE_C_FLAGS -g)ADD_SUBDIRECTORY(./utils/ ./utils/)
ADD_SUBDIRECTORY(./src ./bin)src
cmake_minimum_required(VERSION 3.16)file(GLOB SRC_LIST ./*.c)
include_directories(../include)
LINK_DIRECTORIES( ../build/utils)
LINK_LIBRARIES(utils.so)
ADD_EXECUTABLE(src ${SRC_LIST})utils
cmake_minimum_required(VERSION 3.16)file(GLOB SRC_LIST ./*.c)
include_directories(../include)ADD_LIBRARY(utils SHARED ${SRC_LIST})此为删减版build目录结构 最后运行src
7、注意 不一定每个目录里都要有CMakeLists.txt文件,只要CMakeLists.txt里的各个路径引用正确即可 CMakeLists.txt中还有许多函数和宏在大型项目组十分常见可以自行查找本文不再加以赘述。