UBuntu CMake工程配置基础

本文介绍如何使用CMake在Linux环境下构建C++项目,包括安装CMake、创建简单的Hello World项目、配置CMakeLists.txt文件、执行cmake命令及make命令进行编译。
 

install CMake

我用CMake并不关注它的跨平台特性,因为我只专注于64位 Linux C++ server领域。
sudo apt-get install cmake

# cmake --version
cmake version 2.8.7

HelloWorld工程

mkdir -p examples/helloworld
cd examples/helloworld

创建main.cpp 文件,代码如下:

#include <stdio.h>
int main()
{
    printf("Hello World from Main!\n");
    return 0;
}

创建CMakeLists.txt文件,配置如下:
PROJECT (HELLOWorld)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})

在同目录下,运行cmake .
chenshu@chenshu-ubuntu:~/Ubuntu One/c++/cmake/examples/helloworld$ cmake .
— The C compiler identification is GNU
— The CXX compiler identification is GNU
— Check for working C compiler: /usr/bin/gcc
— Check for working C compiler: /usr/bin/gcc — works
— Detecting C compiler ABI info
— Detecting C compiler ABI info - done
— Check for working CXX compiler: /usr/bin/c++
— Check for working CXX compiler: /usr/bin/c++ — works
— Detecting CXX compiler ABI info
— Detecting CXX compiler ABI info - done
— This is BINARY dir /home/chenshu/Ubuntu One/c++/cmake/examples/helloworld
— This is SOURCE dir /home/chenshu/Ubuntu One/c++/cmake/examples/helloworld
— Configuring done
— Generating done
— Build files have been written to: /home/chenshu/Ubuntu One/c++/cmake/examples/helloworld


Makefile以及其他一些文件被cmake生成了。执行make命令,hello二进制文件被编译出来。运行./hello,可以看到结果。
Hello World from Main!

make VERBOSE=1 可以看到详细的编译过程。
make clean 就可以清理工程

外部构建

HelloWorld采用内部构建,cmake产生的代码和自己的源代码文件在同一个目录,非常不好。因此需要采用cmake的外部构建方式。
创建helloworld2目录
这次创建一个src目录存放源代码,doc目录存放项目文档,
CMakeLists.txt需要出现在项目根目录和src目录中。
项目根目录下的内容如下:
project (HelloWorld2)
add_subdirectory(src bin)
src目录下内容如下:
add_executable(hello2 main.cpp)

创建一个build目录
cd build
cmake ..
make
build/bin下会找到hello2可执行文件。

支持gdb调试

在src/CMakeLists.txt文件中添加一行: set(CMAKE_BUILD_TYPE Debug)

在Jetson平台上配置CMake项目以支持CUDA需要考虑几个关键步骤。Jetson平台通常使用NVIDIA的L4T(Linux for Tegra)操作系统,该系统基于Ubuntu,并预装了特定版本的CUDA工具包和驱动程序。以下是如何在CMake项目中正确配置CUDA环境的详细说明: ### 1. 确认CUDA安装版本 Jetson平台上的CUDA版本通常是固定的,例如在JetPack 5.1.4中,CUDA版本为11.4。可以通过以下命令确认当前安装的CUDA版本: ```bash nvcc --version ``` ### 2. 设置CMake以使用正确的CUDA工具包 CMake默认可能会使用系统路径中的CUDA工具包,但在某些情况下,可能需要显式指定CUDA的版本。可以使用`-DCUDA_VERSION`参数来覆盖默认值。例如,如果希望使用CUDA 11.4,可以在CMake命令中添加如下参数: ```bash cmake -DCUDA_VERSION=11.4 .. ``` ### 3. 在CMakeLists.txt中启用CUDA支持 在项目的`CMakeLists.txt`文件中,需要启用CUDA支持并指定CUDA的编译器标志。以下是一个基本的配置示例: ```cmake cmake_minimum_required(VERSION 3.18) project(MyCudaProject LANGUAGES CXX CUDA) # 设置CUDA架构 set(CUDA_ARCHS "53" CACHE STRING "CUDA architectures to build for") # 启用CUDA enable_language(CUDA) # 添加CUDA编译选项 set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_${CUDA_ARCHS}") # 查找CUDA库 find_package(CUDA REQUIRED) # 添加可执行文件 add_executable(my_cuda_app main.cu) # 链接CUDA运行时库 target_link_libraries(my_cuda_app PRIVATE CUDA::cudart) ``` ### 4. 构建项目 完成上述配置后,进入构建目录并执行CMake配置和构建过程: ```bash mkdir build && cd build cmake -DCUDA_VERSION=11.4 .. make ``` ### 5. 使用`find_package(CUDA)`的替代方法 从CMake 3.18开始,推荐使用`LANGUAGES CUDA`方式来启用CUDA支持,而不是传统的`find_package(CUDA)`。这种方式更简洁且与现代CMake特性兼容性更好。如果使用较旧版本的CMake,可能需要依赖`find_package(CUDA)`来获取CUDA的路径和编译选项。 ### 6. 配置OpenCV与CUDA支持(可选) 如果项目中使用了OpenCV并且希望启用CUDA加速,可以在`CMakeLists.txt`中添加OpenCV的依赖项: ```cmake find_package(OpenCV REQUIRED) target_link_libraries(my_cuda_app PRIVATE ${OpenCV_LIBS}) ``` 确保OpenCV是带有CUDA支持的版本,例如在Jetson平台上安装的OpenCV 4.9.0版本[^2]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值