cmake编译方法:将生成的可执行文件和库文件放置到单独的目录下

2024-05-04 10:12

本文主要是介绍cmake编译方法:将生成的可执行文件和库文件放置到单独的目录下,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 简介

前面几篇文章学习了cmake工具针对单个 .c文件的编译方法。

cmake针对含有多个 .c文件的工程的使用编译。cmake工程编译是如何实现编译生成库文件。

当源文件组织到不同的目录下时,cmake工具该如何编译工程。

本文学习使用 cmake工具编译,使的生成的可执行文件与库文件放置到单独的目录下。

二. cmake编译方法:将生成的可执行文件和库文件放置到单独的目录下

前面几个 cmake编译工程的实例中,make 编译生成的可执行文件和库文件会与 cmake 命令产生的中间文件(CMakeCache.txt、CmakeFiles、cmake_install.cmake 以及 Makefile 等)混在一起,也就是它们在同一 个目录下;

如果我想让可执行文件单独放置在 bin 目录下,而库文件单独放置在 lib 目录下,就像下面这样:

将库文件存放在 build 目录下的 lib 目录中,而将可执行文件存放在 build 目录下的 bin 目录中,这个时候又该怎么做呢?
这个时候我们可以通过两个变量来实现。其实实现这个需求非常简单,通过对 LIBRARY_OUTPUT_PATH 和EXECUTABLE_OUTPUT_PATH 变 量 进 行 设 置 即 可 完 成 ;
EXECUTABLE_OUTPUT_PATH 变量控制可执行文件的输出路径;
LIBRARY_OUTPUT_PATH 变量控制库文件的输出路径。

更改 src 目录下的 CMakeList.txt 文件

将 src 目录下的 CMakeList.txt 文件进行修改, src 目录下的 CMakeList.txt 文件更改后内容如下:
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 文件

然后再对 libhello 目录下的 CMakeList.txt 文件进行修改,如下所示:

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) #设置库文件的生成路径
add_library(libhello hello.c) #设置生成的库文件名+所需的源文件
#重新设置库文件名
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello") 
修改完成之后,再次按照步骤对工程进行构建、编译,即进入工程根目录下,依次输入如下命令:
cd build/
cmake ../
make
此时便会按照我们的要求,将生成的可执行文件 hello 放置在 build/bin 目录下、库文件 libhello.a 放置在 build/lib 目录下。
最终的目录结构就如下所示:
├── build
│ ├── bin
│ │ └── hello
│ └── lib
│ └── libhello.a
├── CMakeLists.txt
├── libhello
│ ├── CMakeLists.txt
│ ├── hello.c
│ └── hello.h
└── src
├── CMakeLists.txt└── main.c

 

关于 cmake 编译可执行程序,库文件的举例到这里。

接下来学习在使用 cmake工具时,关于CMakeLists.txt 语法规则。

这篇关于cmake编译方法:将生成的可执行文件和库文件放置到单独的目录下的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958959

相关文章

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil