使用cmake将一个源文件编译成一个可执行的二进制文件

本文详细介绍了如何使用CMake构建一个简单的项目,包括创建目录结构、编写CMakeLists.txt文件、配置编译路径和源文件,并最终生成可执行二进制文件。通过CMake,可以方便地管理项目的编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cmake是一个工程构建工具,使用它可以自动地生成makefile文件,且能够构建编译文件,链接库,安装文件等。

现构建一个使用cmake的项目或工程,假设这个项目或工程的名字为code。

1.首先,新建一个文件夹,命名为code,于是code就是代码的根目录。并进入code目录中。

zhuquan@zhuquan-HP-Z230-Tower-Workstation:$ mkdir code
zhuquan@zhuquan-HP-Z230-Tower-Workstation:$ cd code

2.其次,在code目录中新建几个子目录,分别命名为src,include,lib,bin。

其中,src用来存放源文件;

include用来存放头文件;

lib用来存放编译好的库文件;

bin用来存放编译好的可执行的二进制文件。

zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code$ mkdir src include lib bin

注:为了把code的目录结构告诉cmake,所以我们需要在code目录中建立一个cmake编译文件,命名为CMakeLists.txt。

Ubuntu系统上使用CMake编译C++为共享库(.so文件)通常包含以下几个步骤: 1. **安装必要的工具**: 首先确保已经安装了`gcc`, `g++`, 和 `cmake`。你可以通过运行以下命令来检查和安装它们(如果未安装): ``` sudo apt-get update sudo apt-get install build-essential cmake ``` 2. **创建CMakeLists.txt**: 创建一个名为`CMakeLists.txt`的文件,并添加以下内容,描述了项目的基本结构和构建配置: ```cmake cmake_minimum_required(VERSION 3.5) project(MyProject) # 指定源文件目录和目标目录 set(CMAKE_CXX_STANDARD 11) # 设置C++标准 set(SOURCE_DIR src) # 源码存放位置 set(BINARY_DIR bin) # 输出二进制文件位置 # 添加C++源文件 add_executable(${PROJECT_NAME} ${SOURCE_DIR}/main.cpp) # 将生成的目标设置为动态链接库 find_package(Threads REQUIRED) # 寻找并使用线程库 target_link_libraries(${PROJECT_NAME} Threads::Threads) # 定义安装路径(可选) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION lib) ``` 这里假设你有一个名为`main.cpp`的C++源文件。 3. **构建过程**: - 进入项目的根目录: ``` cd /path/to/your/project ``` - 创建一个新的构建目录(如build),然后进入该目录: ``` mkdir build cd build ``` - 初始化CMake,指定源代码目录和构建目录: ``` cmake .. ``` - 编译: ``` make ``` - 如果一切顺利,将在`bin`目录下看到编译后的`.so`文件(如libMyProject.so)。 4. **测试和引用**: 使用`ldd`命令验证是否成功创建了一个动态链接库: ``` ldd bin/libMyProject.so ``` 而在其他C++程序中使用这个库,只需包含头文件并在链接时指定动态库即可: ```cpp #include "myproject.h" // 假设头文件名 int main() { MyProjectClass obj; // 根据需要实例化对象 return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值