2016-06-11 46 views
0

FindFoo.cmake:库不能看到自己的头

# Foo_FOUND - system has Foo 
# Foo_INCLUDE_DIRS - the Foo include directories 
# Foo_LIBRARIES - link these to use Foo 
# Foo_VERSION 
# Foo_DEFINITIONS - compiler switches required for using Foo 

find_package(PkgConfig) 
pkg_check_modules(PC_Foo QUIET Foo) 

find_path(Foo_INCLUDE_DIR Foo/Foo.h 
    PATHS ${PC_Foo_INCLUDEDIR} ${PC_Foo_INCLUDE_DIRS} 
) 

find_library(Foo_LIBRARY Foo 
    PATHS ${PC_Foo_LIBDIR} ${PC_Foo_LIBRARY_DIRS} 
) 

set(Foo_VERSION ${PC_Foo_VERSION}) 

include(FindPackageHandleStandardArgs) 
find_package_handle_standard_args(Foo 
    FOUND_VAR Foo_FOUND 
    REQUIRED_VARS 
    Foo_LIBRARY 
    Foo_INCLUDE_DIR 
    VERSION_VAR Foo_VERSION 
) 

if(Foo_FOUND) 
    set(Foo_LIBRARIES ${Foo_LIBRARY}) 
    set(Foo_INCLUDE_DIRS ${Foo_INCLUDE_DIR}) 
    set(Foo_DEFINITIONS ${PC_Foo_CFLAGS_OTHER}) 
endif() 

mark_as_advanced(
    Foo_INCLUDE_DIR 
    Foo_LIBRARY 
) 

的CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8) 
PROJECT(sandbox) 

set(CMAKE_AUTOMOC ON) 
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") 

FIND_PACKAGE(Qt5Core REQUIRED) 
find_package(Foo REQUIRED) 
include_directories(${Foo_INCLUDE_DIRS}) 

SET(sandbox_SOURCES main.cpp) 
ADD_EXECUTABLE(sandbox ${sandbox_SOURCES}) 

QT5_USE_MODULES(sandbox Core) 
TARGET_LINK_LIBRARIES(sandbox ${Foo_LIBRARIES}) 

#include <Bar1.h>在我的计划作品,而#include <Foo/Bar1.h>没有。而真正的问题是,我不能建立我的计划,因为Bar1.h包含#include <Foo/Bar2.h>和:

...Foo/Bar1.h: fatal error: Foo/Bar2.h: No such file or directory compilation terminated.

的CMake 3.5.1

+0

使用给定的'find_path'调用include指令'#include '应该可以工作。可能是,你使用'find_package(Foo)'的结果不正确,但是不显示你的'CMakeLists.txt'。 – Tsyvarev

+0

在问题中添加了CMakeLists.txt。 – theorist

回答

0

貌似问题是CMake的缓存。我删除一切从CMakeFiles目录,然后CMake的不能配置项目:

Could NOT find Foo (missing: Foo_INCLUDE_DIR)

我不得不添加PATH_SUFFIXES到find_path(),所有的问题都没有了。