PointCloudLibrary / pcl

Point Cloud Library (PCL)
https://pointclouds.org/
Other
9.93k stars 4.61k forks source link

Build fails when pcl_io is disabled #235

Closed wjwwood closed 11 years ago

wjwwood commented 11 years ago

If I pass -DBUILD_io:BOOL=OFF to cmake, pcl will fail to build when linking pcl_surface:

[ 59%] Built target pcl_segmentation
Linking CXX shared library ../lib/libpcl_surface.dylib
ld: library not found for -lpcl_io
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/libpcl_surface.1.7.0.dylib] Error 1
make[1]: *** [surface/CMakeFiles/pcl_surface.dir/all] Error 2
make: *** [all] Error 2

This code assumes pcl_io is always available:

https://github.com/PointCloudLibrary/pcl/blob/master/surface/CMakeLists.txt#L157

Should pcl_surface be completely disabled is pcl_io is disabled or should this code just check and link against pcl_io only if it is being built?

wjwwood commented 11 years ago

This diff seems to work for me (pcl_surface still builds), but I feel like other checks might be required here as well:

diff --git a/surface/CMakeLists.txt b/surface/CMakeLists.txt
index a5af191..1ed4009 100644
--- a/surface/CMakeLists.txt
+++ b/surface/CMakeLists.txt
@@ -154,7 +154,11 @@ if(build)
     include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${VTK_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR})
     link_directories(${VTK_LIBRARY_DIRS})
     PCL_ADD_LIBRARY(${LIB_NAME} ${SUBSYS_NAME} ${srcs} ${incs} ${impl_incs} ${VTK_SMOOTHING_INCLUDES} ${POISSON_INCLUDES} ${OPENNURBS_INCLUDES} ${ON_NURBS_INCLUDES})
-    target_link_libraries(${LIB_NAME} pcl_common pcl_io pcl_search pcl_kdtree pcl_octree ${VTK_SMOOTHING_TARGET_LINK_LIBRARIES} ${ON_NURBS_LIBRARIES})
+    if(${BUILD_io})
+        target_link_libraries(${LIB_NAME} pcl_common pcl_io pcl_search pcl_kdtree pcl_octree ${VTK_SMOOTHING_TARGET_LINK_LIBRARIES} ${ON_NURBS_LIBRARIES})
+    else()
+        target_link_libraries(${LIB_NAME} pcl_common pcl_search pcl_kdtree pcl_octree ${VTK_SMOOTHING_TARGET_LINK_LIBRARIES} ${ON_NURBS_LIBRARIES})
+    endif()
     if(QHULL_FOUND)
       target_link_libraries(${LIB_NAME} ${QHULL_LIBRARIES})
     endif(QHULL_FOUND)