C++ CMake图书馆问题

C++ CMake图书馆问题,c++,compiler-construction,makefile,cmake,libraries,C++,Compiler Construction,Makefile,Cmake,Libraries,我正试图编译一个程序,使用URG(激光扫描仪)库和PCL。URG使用make构建,而PCL使用cmake。我一直在尝试使用cmake来处理这两个问题,但我遇到了一些问题 我找到FindURG.cmake并将其放在此处的模块文件夹中: 我的简历是: cmake_minimum_required(VERSION 2.6 FATAL_ERROR) project(MY_GRAND_PROJECT) find_package(PCL 1.3 REQUIRED COMPONENTS common io)

我正试图编译一个程序,使用URG(激光扫描仪)库和PCL。URG使用make构建,而PCL使用cmake。我一直在尝试使用cmake来处理这两个问题,但我遇到了一些问题

我找到FindURG.cmake并将其放在此处的模块文件夹中:

我的简历是:

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})

find_package(URG REQUIRED)
include_directories(${URG_INCLUDE_DIR})
link_directories(${URG_LIBRARY})

#add_executable(pcd_write_test pcd_write.cpp)
add_executable(urg_read_test  gdScanSample.cpp)

#target_link_libraries(pcd_write_test  ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})
target_link_libraries(urg_read_test ${URG_LIBRARY})

SET(CMAKE_C_FLAGS  "-I/usr/local/include/urg")
#SET(CMAKE_CXX_FLAGS "-I/usr/local/include/urg")
发现PCL良好,同时发现URG,如下所示。目录看起来也不错

root@CCSL02:/home/marwan/pcl_sample# cmake CMakeLists.txt
-- looking for PCL_COMMON
-- looking for PCL_OCTREE
-- looking for PCL_IO
-- Found c_urg libraries. /usr/local/lib/libc_urg_system.so/usr/local/lib/libc_urg.so/usr/local/lib/libc_urg_connection.so/usr/lib/liburg.so/usr/lib/liburg_connection.so/usr/lib/liburg_system.so/usr/lib/liburg_common.so/usr/lib/liburg_coordinate.so/usr/lib/liburg_geometry.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/marwan/pcl_sample
但是,一旦我运行make,我就会得到:

root@CCSL02:/home/marwan/pcl_sample# make
[100%] Building CXX object CMakeFiles/urg_read_test.dir/gdScanSample.cpp.o
/home/marwan/pcl_sample/gdScanSample.cpp:10:21: fatal error: UrgCtrl.h: No such file or directory compilation terminated.
make[2]: *** [CMakeFiles/urg_read_test.dir/gdScanSample.cpp.o] Error 1
make[1]: *** [CMakeFiles/urg_read_test.dir/all] Error 2
make: *** [all] Error 2
我尝试过使用CmakeList,尝试添加CXX标志,但运气不佳

应该注意的是,下面的makefile通常编译urg程序

# Makefile for urg_sample
# Satofumi KAMIMURA
# $Id: Makefile 1997 2012-10-30 02:57:51Z satofumi $

CXXFLAGS = -g -O0 -Wall -Werror `urg-config --cflags` `sdl-config --cflags`
LDFLAGS =
LDLIBS = `urg-config --libs` `sdl-config --libs` -lc

TARGET = gdScanSample

all : $(TARGET)

clean :
    $(RM) *.o $(TARGET)

.PHONY : all clean

您需要验证
SET(CMAKE_C_标志“-I/usr/local/include/urg”)
是否指向所有h文件所在的目录。也许您需要添加多个位置。

多亏了ComicSanms解决了此问题

以下是一个正在运行的CMakeLists.txt:

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})

find_package(URG REQUIRED)
include_directories(${URG_INCLUDE_DIR}/urg)
link_directories(${URG_LIBRARIES}) 

add_executable(pcd_write_test pcd_write.cpp)

target_link_libraries(pcd_write_test  ${PCL_LIBRARIES}  ${URG_LIBRARIES})

我通过运行urg config--cflags(CMAKE_CXX_FLAGS)-I/usr/local/include/urg-I/usr/include/SDL-D_GNU_SOURCE=1-D_REENTRANT)获得了目录,这是urg congig和SDL config--cflags的输出。如果我将CMAKE_C_标志更改为CMAKE_CXX_标志,则会得到对函数的未定义引用。
PCL_INCLUDE_DIRS
从何而来?我认为这应该包括h文件所在的实际目录。与PCL\U库目录和外部库相同。它来自FindPCL.cmake。pcl完全没有问题。它是未编译的URG库。不要使用
CMAKE\u标志
指定包含目录(这是
include\u目录
target\u include\u目录
的目的)。事实上,不要将其用于任何用途,现代CMake几乎总是有更好的替代品可用。尝试在脚本中添加一些命令,以验证“查找”脚本获得的变量是否包含所需的值。@ComicSansMS Good call,URG_INCLUDE_DIR just/usr/local/INCLUDE。最后添加/urg修复了错误。include_目录(${URG_include_DIR}/URG)但是,我得到了一个新目录/usr/bin/ld:not find-lURG collect2:ld返回了1个退出状态注意:URG_库是/usr/local/lib/libc_URG。so@ComicSansMS忽略我的最后一条评论,我实际上得到了所有这些未定义的函数引用:gdScanSample.cpp:(.text+0x49):未定义对
qrk::UrgCtrl::UrgCtrl()'gdScanSample.cpp:(.text+0x61):未定义对
qrk::UrgCtrl::connect(char const*,long)”的引用…能否检查原始Makefile中使用的
urg config--libs
调用的输出?将其与find脚本获得的
${URG_LIBRARY}
进行比较。@ComicSansMS URG config--libs returns-lurg_monitor-lurg-lurg_coordinate-lurg_geometry-lurg_connection-lurg_common-lurg_system-lm,${URG_LIBRARY}是路径:/usr/local/lib/libc_URG.so