Включая мои библиотеки без полного пути - PullRequest
1 голос
/ 01 февраля 2020

Проект имеет следующую структуру:

.
|- CMakeList.txt
`- src
   |- lib
   |  |- CMakeList.txt
   |  `- libA
   |     |- CMakeList.txt
   |     |- libA.c
   |     `- libA.h
   `- main
      |- CMakeList.txt
      `- main.c

, и я хочу включить файл libA.h в main.c, используя #include "libA.h", но при попытке скомпилировать fatal error: hello.h: No such file or directory возникает ошибка. Могу ли я сделать так, чтобы cmake добавил соответствующие флаги включения, и я мог бы написать #include "libA.h".

Я понимаю, что вы можете вручную добавить флаги, такие как -Ipath/to/src/lib/libA -Ipath/to/src/lib/libB ..., но я хотел бы автоматизировать этот процесс.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2020

Вы можете использовать встроенную переменную PROJECT_SOURCE_DIR CMake для доступа к исходному каталогу root вашего проекта. Используйте это с target_include_directories(), чтобы использовать #include "libA.h" в main.c:

В вашем src/main/CMakeLists.txt:

add_executable(MyMain main.c)
target_include_directories(MyMain PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/libA)
0 голосов
/ 01 февраля 2020

Вы хотите установить ваши target_include_directories в вашем libA / CMakeLists.txt. После того как цель построена с помощью add_library, вы хотите добавить следующую инструкцию:

add_library(libA libA.c libA.h)
target_include_directories(libA PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

Эта инструкция будет указывать, что libA и любая цель, которая ссылается на нее, также рассматривает $ {CMAKE_CURRENT_SOURCE_DIR} как путь для поиска включает в себя. Это известно как publi c заголовок библиотеки. В идеале вы хотели бы, чтобы эти заголовочные файлы находились в их собственном подкаталоге, чтобы вы могли легко включать их в другие проекты, не имея файла libA. c в каталоге include. Например:

.
|- CMakeList.txt
`- src
   |- lib
   |  |- CMakeList.txt
   |  `- libA
   |     |- CMakeList.txt
   |     |- include
   |     |  `-libA.h
   |     |- src
   |        `- libA.c
   `- main
      |- CMakeList.txt
      `- main.c
0 голосов
/ 01 февраля 2020

Директории include_directies должны решить, что для вас: https://cmake.org/cmake/help/v3.0/command/include_directories.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...