(CMake)PCL +其他图书馆

时间:2017-07-06 14:56:28

标签: visual-studio cmake libraries point-cloud-library

上下文:我正在关注this guide以使用Point Cloud Library PCL生成我的Visual Studio项目,这似乎是使用它的唯一方法。

问题:我已经意识到使用这种方法我不能包含其他库,比如Bitmap_image.hpp甚至是string.h

我尝试过:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(MY_GRAND_PROJECT)
find_package(PCL 1.3 REQUIRED COMPONENTS common io)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcd_write_test pcd_write.cpp)
target_link_libraries(pcd_write_test ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} ${string})

结果:

它生成项目。 PCL完美无缺,行

#include <string>

不显示错误。

但是

string a;

抛出&#34; 错误C2065&#39;字符串&#39;:未声明的标识符&#34; 其他图书馆也是如此。

任何解决方案?

1 个答案:

答案 0 :(得分:3)

这是(基本的)C ++知识,与构建系统的任何部分无关。

const dateString = v => { if (isNaN(v)) return; let parsedDate = new Date(v); let adjustedDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60000); return adjustedDate; }; <DateInput source="your_date" parse={dateString} /> 引入C ++标准库,特别是容器#include <string>。只要您的编译器知道您正在编译C ++(并且Visual Studio从std::string文件扩展名中知道这一点),它就会自动为您链接一个版本的C ++标准库。

您对C ++标准库的这些部分的所有调用都需要以.cpp为前缀,或者您需要在代码中的某处std::(尽管通常不建议使用第二个)。

换句话说,请删除using namespace std;,因为您在原始CMakeLists.txt文件中不存在(并且也没有任何意义),并在源代码中使用${string}等。

对于std::string,您需要指明在哪里找到它。如果它是PCL的一部分,那应该已经有效了。

如果它是一个不同的库,您将需要学习CMake的基础知识来添加这些库。提示:CMake命令Bitmap_image.hppadd_library()以及target_include_directories()。此外,target_link_libraries()target_compile_options()可能很有用。

对CMake的一个很好的现代介绍是Daniel Pfeifer