我的项目可以找到一个库标题,但不能找到另一个

时间:2016-06-02 12:11:17

标签: c++ ubuntu cmake

我有两个C ++库,我在Ubuntu上使用它。其中一个,我们称之为foo,我通过apt-get安装,例如sudo apt-get install libfoo-dev。另一个,让我们称之为bar,我通过下载源文件并运行make install来安装。完成这些安装后,我会在foo/usr/include/foo/foo.h的位置提供头文件,在bar等位置提供来自/usr/local/include/bar/bar.h的头文件。据我所知,foobar的依赖关系。

然后我创建了自己的C ++项目,并包含了行#include "bar/bar.h"。但是在编译我的项目时,我收到一条错误error: foo.h: No such file or directory。如果我在调试器中单击错误,它会打开文件bar.h,并突出显示行#include <foo.h>。因此,我的项目能够找到bar.h,但不能找到foo.h。我在foo文件中未提及barCMakeLists.txt

所以我的问题是:

  1. 我的项目如何知道如何找到bar.h,当我还没有告诉它在CMakeLists.txt找到它的位置?

  2. 我需要做些什么才能让我的项目找到foo.h并正确编译?

  3. 谢谢!

    编辑:这是我的CMakeLists.txt文件(foobar库都不是这里提到的文件夹):

    cmake_minimum_required(VERSION 2.8.1)
    
    set(CMAKE_CXX_FLAGS "-std=c++11 -O3")
    
    project(Grasping_Simulator)
    
    find_package(OpenGL REQUIRED)
    find_package(GLEW REQUIRED)
    find_package(GLUT REQUIRED)
    find_package(Eigen3 REQUIRED)
    find_package(Boost REQUIRED)
    find_package(OpenCV REQUIRED)
    
    include_directories(${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS})
    
    file(GLOB SRCS *.cpp *.h)
    
    add_executable(${PROJECT_NAME} ${SRCS})
    
    target_link_libraries(${PROJECT_NAME} ${GLEW_LIBRARY} ${GLUT_LIBRARY} ${OpenCV_LIBS} pthread GL boost_system)
    

1 个答案:

答案 0 :(得分:2)

您需要在编译命令中添加选项-I/usr/include/foo/

默认情况下,/usr/include//usr/local/include等位置已位于包含搜索路径中。但是,您的图书馆bar使用#include <foo.h>做了一些顽皮的事情。真的,它应该使用像#include <foo/foo.h>这样的东西(顺便说一下,如果你能做出更清洁的改变)。这将允许编译器搜索其所有包含路径,包括路径/usr/include/,并尝试附加/foo/foo.h - 这将成功。就目前而言,默认包含路径中没有任何内容仅仅通过附加/foo.h就可以工作,因此无法找到它。

编辑:根据您上面的CMake代码,您很可能需要将包含值/usr/include/foo的变量附加到include_directories行以获得所需的效果(此是在编译行中包含-I/usr/include/foo/