2014-02-26 4 views
5

Ich möchte CMake den Header für add_executable finden und die .so-Datei für target_link_libraries finden.Cmake, finde eine Header-Datei in/usr/local/include und Bibliothek in/usr/local/lib

Die Header-Datei möchte ich zu finden ist LCM-cpp.hpp (auf ubunthu)

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

Die CMakeLists.txt Datei im Stamm meines Projekts

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) 

Der Fehler, den ich bekommen :

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

Ihre Frage ist * sehr * unklar. Kannst du es ausarbeiten? Wild rate: Suchen Sie vielleicht nach ['include_directories'] (http://cmake.org/cmake/help/v2.8.12/cmake.html#command:include_directories) und geben Sie einen vollständigen Pfad zu' target_link_libraries' ein? – Angew

+0

@Angew include_directories (include/usr/local/include) funktioniert nicht (Ich habe ein Verzeichnis ./include für meine eigenen Header-Dateien) – user1443778

+0

Bitte post ein [SSCCE] (http://sscce.org/): ein minimales CMakeList & Quellcode, der das Problem demonstriert, poste deine Header-Datei-Standorte und alle Fehler, die du bekommst (Compiler-Fehler, nehme ich an). – Angew

Antwort

1

der CMake Befehl include_directories() wird zur Angabe zusätzlicher Verzeichnisse verwendet, in denen die Compiler sollte nach #include d Dateien suchen. Es hat keinerlei Auswirkungen auf die Suche von CMake nach Quelldateien.

Wenn die Datei /usr/local/include/lcm/lcm-cpp.hpp wirklich ein Teil Ihrer ausführbar ist (Sie würden wollen, dass es in dem Projekt in Visual Studio enthalten sind, zum Beispiel), werden Sie es mit dem vollständigen Pfad angeben:

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

Aufgrund seiner Position sieht es jedoch eher wie eine Bibliothek außerhalb Ihrer ausführbaren Datei aus. Wenn dies der Fall ist, sollte es überhaupt nicht in add_executable() aufgeführt werden.

Verwandte Themen