CMakeLists - 让没有找到头文件

问题描述:

我有以下CMakeLists文件:CMakeLists - 让没有找到头文件

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 

project(PointCloudComparator) 

find_package(PCL 1.7 REQUIRED COMPONENTS common io) 

set(PCL_DIR "/usr/share/pcl-1.7/PCLConfig.cmake") 
set(PCL_INCLUDE_DIRS "/usr/include/pcl-1.7") 
set(PCL_LIBRARY_DIRS "/usr/lib/") 


include_directories(${PCL_INCLUDE_DIRS} "/usr/include/eigen3" "include") 
link_directories(${PCL_LIBRARY_DIRS}) 
add_definitions(${PCL_DEFINITIONS}) 

add_executable (segmentator src/segmentation.cpp include/segmentation.h) 
target_link_libraries (segmentator ${PCL_LIBRARIES} 
${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} 
"/usr/lib/libpcl_visualization.so" "/usr/lib/libpcl_keypoints.so" 
"/usr/lib/libpcl_features.so" "/usr/lib/libpcl_kdtree.so" 
"/usr/lib/libpcl_search.so" "/usr/lib/libpcl_filters.so" 
"/usr/lib/libpcl_segmentation.so" 
"/usr/lib/libpcl_sample_consensus.so") 

add_executable (comparator src/comparator.cpp include/comparator.h 
include/segmentation.h) 
target_link_libraries (comparator ${PCL_LIBRARIES} 
${PCL_COMMON_LIBRARIES} 
${PCL_IO_LIBRARIES} "/usr/lib/libpcl_visualization.so" 
"/usr/lib/libpcl_keypoints.so" "/usr/lib/libpcl_features.so" 
"/usr/lib/libpcl_kdtree.so" "/usr/lib/libpcl_search.so" 
"/usr/lib/libpcl_filters.so" "/usr/lib/libpcl_segmentation.so" 
"/usr/lib/libpcl_sample_consensus.so") 

但是,当我尝试编译我的代码,我得到的错误:

CMakeFiles/comparator.dir/src/comparator.cpp.o: In function `main': 
comparator.cpp:(.text+0x3313): reference to 
`region_growing_segmentation(std::string)' not defined 
collect2: error: ld returned 1 exit status 

region_growing_segmentation(STD :: string)是一个在segmentation.h中声明并在segmentation.cpp中定义的函数。 Eclipse实际上知道函数的位置,但是当我尝试运行时,只是简单地找不到它。有任何想法吗?

问候

+0

CMake 2.6版本不支持'target_link_libraries'。上述CMake文件至少需要2.8.11版本。也就是说,我建议你将它升至3.6或3.7,并[开始编写现代CMake](https://rix0r.nl/blog/2015/08/13/cmake-guide/)。 – tambre

你需要建立两个独立的可执行文件(segmentatorcomparator)。每个可执行文件都由一个单独的源文件和一个单独的头文件构成。这就是你说的add_executable命令。单个add_executable命令使用的源文件是而不是与您创建的任何其他可执行目标共享。

如果您有共享的代码应该在两个程序之间共享,那么您应该将其添加到单独的源文件中,并添加到每个可执行文件(将新的通用源文件添加到add_executable命令中)。或者创建一个与两个可执行文件链接的库目标。

+0

所以我只需要添加般的线条: add_library(MYLIB SHARED SRC/segmentation.cpp的src/comparator.cpp) set_property(TARGET MYLIB PROPERTY IMPORTED_LOCATION mylib.a上) 而MYLIB到两个target_link_libraries? –

+0

像你说的那样工作,我只是添加了一个链接到.cpp文件 的库目标。谢谢 –