2014-02-26 77 views
5

我想要CMake找到add_executable的头并找到target_link_libraries的.so文件。Cmake在/ usr/local/include中找到/ usr/local/lib中的头文件

头文件我想找到的是LCM-cpp.hpp(上ubunthu)

ls /usr/local/include/lcm/ 
eventlog.h lcm_coretypes.h lcm-cpp.hpp lcm-cpp-impl.hpp lcm.h 

在我的项目

cmake_minimum_required (VERSION 2.6) 
project (libFoo) 
include_directories(include /usr/local/include/lcm/) 

set(PROJECT_SRC 
    src/Foo.cpp) 

set(PROJECT_H 
    include/Foo.hpp) 

find_library(LCM_LIBRARY 
    NAMES liblcm.so 
    PATHS 
    /usr/local/lib/ 
) 

add_library(liblcm STATIC IMPORTED) 

add_library(foo_lib ${PROJECT_SRC} ${PROJECT_H}) 

add_executable(foo_lcm src/lcm_foo.cpp ${PROJECT_H} lcm-cpp.hpp) 

我得到的错误的根的CMakeLists.txt文件:

Cannot find source file: 

    lcm-cpp.hpp 

Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp 
.hxx .in .txx 
+0

你的问题*非常*不清楚。你能详细说明吗?疯狂的猜测:你是否在寻找['include_directories'](http://cmake.org/cmake/help/v2.8.12/cmake.html#command:include_directories)并将完整路径传递给'target_link_libraries'? – Angew

+0

@Angew include_directories(include/usr/local/include)不起作用(我有一个目录./include用于我自己的头文件) – user1443778

+0

请发表[SSCCE](http://sscce.org/): CMakeList&源代码,演示这个问题,发布你的头文件位置和任何你得到的错误(编译器错误,我假设)。 – Angew

回答

1

CMake命令include_directories()用于指定其他目录,其中编译器应该搜索#include d文件。它根本不影响CMake对源文件的搜索。

如果文件/usr/local/include/lcm/lcm-cpp.hpp真的是你的可执行文件的一部分(你会希望它在Visual Studio项目上市,例如),你就必须用全路径指定:

add_executable(foo_lcm src/lcm_foo.cpp ${PROJECT_H} /usr/local/include/lcm/lcm-cpp.hpp) 

但是,根据它的位置,它看起来更像是一个可执行文件外部的库。如果是这种情况,则根本不应该在add_executable()中列出。