CMake中的find_package(xxx REQUIRED)在windows平台怎么解

简介: CMake中的find_package(xxx REQUIRED)在windows平台怎么解

最近在编译FastDDS时,遇到了这个问题,使用CMake构建时提示找不到库。

下载的源代码不能一次性编过是最让人头疼的问题,这种开源代码通常都是迭代了很多版本,各种配置信息如果不在文档中说明,全靠自己去摸索确实会让人头大,所以,我尽可能的把我遇到的问题分享出来,供大家参考,而不要在这种环境问题上就栽了大跟头。

今天就来介绍一下CMake中的find_package在windows平台该怎么配置,怎么使用。

以一个全新的例子说明,比如我们要在这里使用Dll库中的fnDll1()函数,就这么简单:

#include "Dll1.h"
#include <iostream>
using namespace std;
int main()
{
  std::cout << fnDll1() << std::endl;
  return 0;
}

为它编写一个CMakeLists.txt,方便生成vs工程:

cmake_minimum_required(VERSION 3.10)
project(test)
set(SRC_LIST src/main.cpp)
set(CMAKE_PREFIX_PATH "D:/test/Dll1")
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "D:/test/Debug")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "D:/test/cmaketest/modules")
#here
find_package(DLL1 REQUIRED)
add_executable(test ${SRC_LIST})
target_include_directories(test PRIVATE ${DLL1_INCLUDE_DIR})
target_link_directories(test PRIVATE "D:/test/Debug")
target_link_libraries(test DLL1)

注意我们设置了一个CMAKE_MODULE_PATH路径,在这个路径下有一个FindDLL1.cmake

# 设置查找脚本的名称
set(DLL1_FIND_SCRIPT "FindDLL1.cmake")
# 定义查找库的过程
find_path(DLL1_INCLUDE_DIR
  NAMES Dll1.h
  PATHS ${CMAKE_PREFIX_PATH}
)
find_library(DLL1_LIBRARY
  NAMES DLL1
  PATHS ${CMAKE_PREFIX_PATH}
)
# 检查是否找到库的头文件和链接库
if (DLL1_INCLUDE_DIR AND DLL1_LIBRARY)
  set(DLL1_FOUND TRUE)
else ()
  set(DLL1_FOUND FALSE)
endif ()
# 提供库的相关变量
if (DLL1_FOUND)
  if (NOT DLL1_FIND_QUIETLY)
    message(STATUS "Found DLL1: ${DLL1_LIBRARY}")
  endif ()
else ()
  if (DLL1_FIND_REQUIRED)
    message(FATAL_ERROR "DLL1 library not found")
  else ()
    message(STATUS "DLL1 library not found")
  endif ()
endif ()

如果开源项目中没有形如FindDLL1.cmake的文件,通常就需要我们自己手写一个,这个文件的作用其实就是为了检查到底有没有这样的库存在。

或者如果你觉得写这样的文件太麻烦,不如生成工程后再手动配置三方库头文件和库文件,那你可以先创建一个空文件,把cmake骗过去,之后再自己手动配置。

最后来看一下目录结构:

(假设DLL1库已经编好了,并且头文件在“D:\test\Dll1”下,lib在“D:\test\Debug”目录下)

然后就可以使用cmake工具生成vs工程了:

打开工程,编译没有问题,查看配置项,可以发现cmake已经按我们指定的路径配置好了。

以上便是整个使用过程,之后再遇到这种问题不会头大了吧。

或者如文章中提到的,如果你觉得写这样的文件太麻烦,还不如手动配,那就可以先放置一个空文件,把CMake骗过去,先保证工程能够生成。

相关文章
|
3天前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
|
7月前
|
JSON 开发工具 C++
Windows下用CMake编译JsonCpp及配置(适合新手)
Windows下用CMake编译JsonCpp及配置(适合新手)
299 0
|
3天前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
|
3天前
|
Windows
LabVIEW在Windows平台上的图形导入
LabVIEW在Windows平台上的图形导入
11 0
|
3天前
|
计算机视觉 Windows
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
18 0
|
3天前
|
SQL 关系型数据库 MySQL
Trinitycore学习之windows上用cmake生成vs项目并尝试在windows上启动服务
Trinitycore学习之windows上用cmake生成vs项目并尝试在windows上启动服务
59 0
|
7月前
|
C++
解决方案-CMake error: error in configuration process, project files may be invalid(Windows&VS可参考)
解决方案-CMake error: error in configuration process, project files may be invalid(Windows&VS可参考)
1111 0
|
3天前
|
编解码 数据挖掘 异构计算
Windows平台实现超高分辨率或帧率硬编码
Windows平台实现超高分辨率或帧率硬编码
|
3天前
|
C# 数据安全/隐私保护 开发者
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
|
3天前
|
Linux Shell 开发工具
Git 安装和配置教程:Windows - Mac - Linux 三平台详细图文教程,带你一次性搞 Git 环境
Git是一款免费、开源的分布式版本控制系统,广泛应用于软件开发领域。随着开源和云计算的发展,Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法,带你一次性搞定Git环境
1650 0