Я пытаюсь использовать cmake, но я новичок как для cmake, так и для c++. Я хотел бы иметь часть кода для использования в других программах. Структура папок выглядит так:
/modules/foo
/modules/foo/src
/modules/foo/include/foo
/cmake
/apps/bar
/apps/bar/src
/apps/bar/include
Моя проблема заключается в том, что в основной строке я могу включать (и компилировать и запускать) оба
#include "foo.h"
#include "foo/foo.h"
Я думаю, что это признак того, что что-то не так. Я ищу что-то вроде
#include "foo.h" // only inside the foo source code
#include "foo/foo.h" // outside
Если я удалю include_directories(include/foo)
из /modules/foo/CMakeLists.txt, я получаю компиляционную ошибку, в которой говорится, что файл "foo.h" не найден в /modules/foo/src/foo.cpp
Если я include_directories(${CMAKE_CURRENT_LIST_DIR}/../modules/foo/include)
из FindFoo.cmake, я получаю ошибку в файле 'foo/foo.h' не найден/apps/bar/src/main.cpp
Что я могу сделать? Какова распространенная практика решения таких проблем? Должен ли я игнорировать тот факт, что в apps/bar/src/main.cpp я могу включить и foo.h
и foo/foo.h
? Должен ли я писать include_directories
только один раз и использовать #include "foo/foo.h
также в foo.cpp?
#include "foo.h"
, возможно, в первую очередь включите егоadd_library
.include_directories(${CMAKE_SOURCE_DIR})
в преамбуле основного CMakeLists.txt#include "foo/foo.h"
. Вы делаете это, не забудьте связать с foo
библиотекой команду target_link_libraries
.Драгоценная ссылка: http://www.cmake.org/cmake/help/v2.8.11/cmake.html#section_Commands
mylib/include/mylib
иmylib/src
?