Я пишу библиотеку С++ (только для заголовка) и использую CMake для создания моего проекта (Visual Studio) и файлов решений. Я также пишу тестовый набор, который является частью одного и того же проекта CMake.
Моя проблема возникает, когда я вызываю target_include_directories() в целевой объект, который представляет мою библиотеку только для заголовка, так что пользователи моей библиотеки могут найти свои файлы заголовков. Я получаю следующее сообщение об ошибке (даже если генерация не отменена).
CMake Error in CMakeLists.txt:
Target "Fonts" INTERFACE_INCLUDE_DIRECTORIES property contains path:
"D:/Projects/GPC/fonts/include"
which is prefixed in the source directory.
(D:/Projects/GPC/Fonts - это каталог верхнего уровня моего проекта библиотеки. Btw проблема остается, если я перемещаю файлы заголовков в верхний каталог.)
Строка оскорбления в моем CMakeLists.txt - это (адаптировано для простоты):
target_include_directories(Fonts INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
Я не понимаю, что я делаю неправильно. Без target_include_directories() код потребительских проектов просто не может включать мои файлы заголовков (если только в установленной форме, но я еще не дошел до этого, и в любом случае я хочу иметь возможность использовать мою библиотеку из дерева сборки, без установки.)
Я чувствую, что мне не хватает чего-то основного здесь; но я искал часы, не найдя решения или объяснения.