【问题标题】:PCL 1.8.1 CMake Problems on windowsWindows 上的 PCL 1.8.1 CMake 问题
【发布时间】:2017-11-26 13:03:45
【问题描述】:

我已按照this 页面上的说明在我的 Windows 10 计算机上安装 PCL 1.8.1。安装过程中没有出现错误,安装程序成功退出。我的CMakeLists.txt 看起来像这样:

cmake_minimum_required(VERSION 3.8)
project(MyProject)

set(CMAKE_CXX_STANDARD 11)

find_package(PCL 1.8 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

set(SOURCE_FILES source/main.cpp)
add_executable(MyProject ${SOURCE_FILES})
target_link_libraries(MyProject ${PCL_LIBRARIES})

我收到以下错误:

CMake Error at /cygdrive/c/Program Files/PCL 1.8.1/cmake/PCLConfig.cmake:44 (message):
  PCL can not be found on this machine
Call Stack (most recent call first):
  /cygdrive/c/Program Files/PCL 1.8.1/cmake/PCLConfig.cmake:768 (pcl_report_not_found)
  CMakeLists.txt:6 (find_package)

我使用 Jetbrains CLion 进行开发,使用 CygWin 进行 GCC、CMake 和 GDB。当我查看第 744-769 行的 PCLConfig.cmake 文件时,我发现了一些奇怪的东西:

# check whether PCLConfig.cmake is found into a PCL installation or in a build tree
if(EXISTS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h")
    # Found a PCL installation
    # pcl_message("Found a PCL installation")
    set(PCL_INCLUDE_DIRS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}")
    set(PCL_LIBRARY_DIRS "${PCL_ROOT}/lib")
    if(EXISTS "${PCL_ROOT}/3rdParty")
        set(PCL_ALL_IN_ONE_INSTALLER ON)
    endif(EXISTS "${PCL_ROOT}/3rdParty")

 elseif(EXISTS "${PCL_ROOT}/include/pcl/pcl_config.h")
    # Found a non-standard (likely ANDROID) PCL installation
    # pcl_message("Found a PCL installation")
    ... 

 elseif(EXISTS "${PCL_DIR}/include/pcl/pcl_config.h")
    # Found PCLConfig.cmake in a build tree of PCL
    # pcl_message("PCL found into a build tree.")
    ...

 else(EXISTS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h")
    pcl_report_not_found("PCL can not be found on this machine")  
 endif(EXISTS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h")

第一个 if 条件 if(EXISTS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h") 为真。我已经检查过了。在目录C:/Program Files/PCL 1.8.1//include/pcl-1.8/pcl/ 中存在一个名为pcl_config.h 的文件,但由于某种原因,最后一个条件else(EXISTS "${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h") 完全相同,因此也是如此。这就是错误的来源。我不知道,我现在应该做什么。我是否应该更改 CMake 文件,以便只有第一个条件为真?请帮帮我。

最好的问候,伊普西隆泽特

【问题讨论】:

  • else() 分支条件与if 子句中的条件相同,但没有使用它:像往常一样,elseif 条件和elseif 都不是时执行真的。因此,CMake 认为if 条件为假,即所需文件不存在。您确定 PCL_ROOT 设置为 C:/Program Files/PCL 1.8.1 吗?它应该在PCLConfig.cmake 脚本本身中设置。
  • 它是在我的系统环境变量中设置的。我什至将 set(PCL_ROOT "C:/Program Files/PCL 1.8.1") 添加到 PCLConfig.cmake 文件(在第 1 行),但错误保持不变。
  • 呃,您是否将 PCL 安装到您的 Cygwin 环境中,因为这显然是您运行构建的地方。
  • PCLConfig.cmake 文件由项目自行生成,安装后请勿更改。但是,如果你想调试这个脚本,你可以添加message() call for show value of expression,用于if()

标签: c++ windows cmake clion point-cloud-library


【解决方案1】:

我遇到了同样的错误,并成功解决了。首先,它说

if(EXISTS"${PCL_ROOT}/include/pcl-${PCL_VERSION_MAJOR}.${PCL_VERSION_MINOR}/pcl/pcl_config.h")

所以检查你是否有pcl_config.h。 我发现我在/usr/include/pcl-1.12/pcl/pcl_config.h 有它。估计是因为我的版本是1.12,太高了,PCL_VERSION_MINOR配不上。

我更改了代码(尽管不推荐)。使用/usr/include/pcl-1.12/pcl/pcl_config.h这种路径,而不是${xxxxx},就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多