cmake-链接动静态库、动态库丢失问题、设置头文件搜索路径

1.创建空文件夹,然后cmake快速入门,创建newhello,再创建可执行文件。
生成如下:
在这里插入图片描述
2.创建src文件夹
在这里插入图片描述
创建include文件夹
在这里插入图片描述
3.在include下创建test.h

#ifndef TEST_H  //如果这个宏不存在就定义这个宏,如果存在了就啥也不做
#define TEST_H

void test();


#endif

4.在src下创建test.cpp
在这里插入图片描述

//#include "../include/test.h" //常规方法
#include <test.h> //在cmakelists配置即可这样引用
#include <iostream>
void test()
{
   
   
    std::cout<<"new hello!"<<std::endl;
}

如果要通过#include <test.h>的方式来引用头文件,需要在CMakeLists.txt中进行配置,添加头文件的搜索路径include_directories(./include)

cmake_minimum_required(VERSION 3.0.0)
project(newhello VERSION 0.1.0)

include(CTest)
enable_testing()

#设置头文件的搜索路径
include_directories(./include)

add_executable(newhello main.cpp)

set(CPACK_PROJECT_NAME ${
   
   PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${
   
   PROJECT_VERSION})
include(CPack)

5.一般情况下希望在每个目录下都有一个配置文件,因此在src中添加CMakeLists.txt
在这里插入图片描述

#内部静态库
add_library(test test.cpp)

这里test是库名,test.cpp是添加的内部静态库文件。
6.在根目录下的CMakeLists.txt里添加子目录、链接库等配置
在这里插入图片描述

cmake_minimum_required(VERSION 3.0.0)
project(newhello VERSION 0.1.0)

include(CTest)
### OpenMP与CUDA在CMake配置中的常见错误解决方案 当尝试将OpenMP和CUDA集成到基于CMake的项目中时,可能会遇到多种类型的错误。以下是针对此类问题的一些可能原因及其对应的解决方案。 #### 1. 配置OpenMP支持 为了启用OpenMP的支持,在CMakeLists.txt文件中需要显式调用`find_package(OpenMP)`并设置编译选项。如果未正确找到OpenMP库,则可能导致链接失败或其他运行时错误[^4]。 ```cmake find_package(OpenMP REQUIRED) if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif() ``` 上述代码片段展示了如何通过CMake检测是否存在可用的OpenMP实现,并将其标志应用到目标上。 #### 2. CUDA工具链兼容性 对于CUDA模块而言,其依赖于NVIDIA提供的特定生态系统组件(如cuDNN或NCCL)。某些情况下,即使成功安装了这些依赖项,仍可能出现因版本不匹配而导致的功能缺失或者构建中断现象[^3]。因此建议始终验证当前使用的驱动程序、CUDA Toolkit以及任何附加软件包之间的一致性。 另外值得注意的是,部分较新的GCC版本可能存在与NVCC交互上的局限性;这通常表现为预处理器宏定义丢失问题。可以通过指定较低级别的标准来规避此风险: ```bash export NVCC_FLAGS="-std=c++11" ``` #### 3. 路径冲突排查 有时尽管调整了环境变量或是手动指定了第三方静态/动态链接库的位置,仍然会碰到找不到相应头文件的情况。此时可以考虑清理旧版残留数据后再重新执行安装过程[^2]: ```bash sudo rm -rf /usr/local/share/cmake/* cmake .. make install ``` 以上命令序列先删除先前生成的目标产物以防干扰后续步骤,接着按照常规流程完成整个项目的初始化工作。 --- ### 提供的一个综合示例脚本 下面给出了一段完整的CMakeLists.txt模板作为参考,它涵盖了前面提到的关键要素: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject LANGUAGES CXX CUDA) set(CMAKE_CUDA_STANDARD 14) set(CMAKE_CXX_STANDARD 17) # 寻找必要的开发资源 find_package(OpenMP REQUIRED) find_package(CUDA REQUIRED) add_executable(${PROJECT_NAME} main.cpp kernel.cu ) target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenMP_LIBRARIES} ${CUDA_LIBRARIES} ) install(TARGETS ${PROJECT_NAME} DESTINATION bin) ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值