(CMake) PCL + 其他库
(CMake) PCL + Other libraries
上下文: 我正在关注 this guide 使用点云库 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;
抛出“错误 C2065 'string':未声明的标识符”
其他图书馆也是如此。
有解决办法吗?
这是(基本的)C++ 知识,与构建系统的任何部分无关。
#include <string>
引入 C++ 标准库,特别是容器 std::string
。只要您的编译器知道您正在编译 C++(并且 Visual Studio 从 .cpp
文件扩展名知道这一点),那么它将自动为您 link 一个版本的 C++ 标准库。
您对 C++ 标准库的这些部分的所有调用都需要以 std::
为前缀,或者您需要在代码中的某处使用 using namespace std;
(尽管通常不推荐使用第二种)。
换句话说,删除 ${string}
,因为它在您关注的原始 CMakeLists.txt 文件中不存在(并且也没有任何意义)并在您的源代码中使用 std::string
等等
至于Bitmap_image.hpp
,您需要指出在哪里可以找到它。如果它是 PCL 的一部分,那么它应该已经可以工作了。
如果是不同的库,你需要学习CMake的基础知识才能添加这些库。提示:CMake 命令 add_library()
和 target_include_directories()
和 target_link_libraries()
。此外,target_compile_options()
和 target_compile_definitions()
可能会有用。
对 CMake 进行了很好的现代介绍
上下文: 我正在关注 this guide 使用点云库 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;
抛出“错误 C2065 'string':未声明的标识符” 其他图书馆也是如此。
有解决办法吗?
这是(基本的)C++ 知识,与构建系统的任何部分无关。
#include <string>
引入 C++ 标准库,特别是容器 std::string
。只要您的编译器知道您正在编译 C++(并且 Visual Studio 从 .cpp
文件扩展名知道这一点),那么它将自动为您 link 一个版本的 C++ 标准库。
您对 C++ 标准库的这些部分的所有调用都需要以 std::
为前缀,或者您需要在代码中的某处使用 using namespace std;
(尽管通常不推荐使用第二种)。
换句话说,删除 ${string}
,因为它在您关注的原始 CMakeLists.txt 文件中不存在(并且也没有任何意义)并在您的源代码中使用 std::string
等等
至于Bitmap_image.hpp
,您需要指出在哪里可以找到它。如果它是 PCL 的一部分,那么它应该已经可以工作了。
如果是不同的库,你需要学习CMake的基础知识才能添加这些库。提示:CMake 命令 add_library()
和 target_include_directories()
和 target_link_libraries()
。此外,target_compile_options()
和 target_compile_definitions()
可能会有用。