Cmake,在/ usr/local/include中找到头文件,在/ usr/local/lib中找到库

use*_*778 5 c++ cmake

我希望CMake找到add_executable的头文件,并找到target_link_libraries的.so文件.

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

ls /usr/local/include/lcm/
eventlog.h  lcm_coretypes.h  lcm-cpp.hpp  lcm-cpp-impl.hpp  lcm.h
Run Code Online (Sandbox Code Playgroud)

我项目根目录中的CMakeLists.txt文件

 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)
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

  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
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 2

CMake 命令include_directories()用于指定编译器应在其中搜索#included 文件的其他目录。它完全不影响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)
Run Code Online (Sandbox Code Playgroud)

但是,根据其位置,它看起来更像是可执行文件外部的库。如果是这样的话,它add_executable()根本不应该被列出来。