Компиляция с Clang ++ игнорирует CMAKE_INCLUDE_PATH

Я пытаюсь скомпилировать проект C ++ с помощью clang ++ и CXX_FLAGS "-Wall -stdlib = libc ++ -std = c ++ 11" в OS X. Проект является проектом CMAKE и требует включения cln и ginac. Однако компилятор не может найти соответствующие заголовки, когда я даю такие операторы включения:

#include <cln/cln.h>

or

#include <ginac/ginac.h>

хотя обе библиотеки установлены в / usr / local / lib и их подключаемые каталоги (/ usr / local / include / cln и / usr / local / include / ginac) существуют. я пробовал

set(CMAKE_INCLUDE_PATH /usr/local/include/cln:/usr/local/include/ginac )

но это не дает никакого эффекта, сообщение об ошибке остается прежним:

fatal error: 'ginac/ginac.h' file not found
#include <ginac/ginac.h>
         ^

Обновление:

Мне удалось добавить флаги компилятора для подробного описания, что показывает мне, что пути, по которым clang ищет требуемые заголовки, неверны, поэтому проблема, похоже, похожа на вопрос, как изменить эти пути:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks (framework directory)
End of search list.

тогда как необходимые заголовки все еще находятся в / usr / local / include.

Обновление 2 Добавление CXX_FLAG

-I/usr/local/include

решает проблему - Где я могу глобально установить это по умолчанию?


person Modass    schedule 24.10.2013    source источник


Ответы (3)


Добавление CXX_FLAG

-I/usr/local/include

решает проблему.

person Modass    schedule 25.10.2013

Я просто хочу добавить к обсуждению, что я столкнулся почти с той же проблемой, что и автор, когда include_directories("/usr/local/include/something") в файле CMakeLists.txt не работал, однако я смог обойти проблему, используя подход, рекомендованный, добавив конкретный флаг компилятора в CMakeLists.txt файл:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include/something")

Может ли это быть ошибкой в ​​cmake? Эта проблема связана лишь косвенно, но может быть полезна всем, кто пытается разобраться в ней: https://gitlab.kitware.com/cmake/cmake/issues/19120

person Phillip Seitzer    schedule 17.07.2019

Вы указываете полные пути в CMakeFile.txt, включая подкаталог. Это означает, что когда вы включаете, например, <cln/cln.h> препроцессор будет искать /usr/local/include/cln/cln/cln.h.

Попробуйте вместо этого, например,

set(CMAKE_INCLUDE_PATH /usr/local/include)
person Some programmer dude    schedule 24.10.2013
comment
Хороший момент, но это не помогло - мне кажется, что изменения, которые я вношу в CMakeLists.txt, не оказывают никакого влияния. Я распечатал настройки переменных, и кажется, что все они установлены правильно. Я использовал make clean и даже удалил CMakeCache.txt во время проб, нужно ли мне сбрасывать что-нибудь еще? - person Modass; 24.10.2013
comment
@Modass Создайте новую подпапку и сделайте, например, cmake .., так вы можете быть уверены, что у вас чистая установка. Это может помочь. - person Some programmer dude; 24.10.2013
comment
хорошо, нет вывода, думаю, я сначала исправлю это, а затем вернусь - person Modass; 24.10.2013
comment
Я должен увидеть свои изменения, например в CMAKE_CXX_FLAGS также после вызова ccmake .. (после cmake ..), верно? Поскольку это не так, хотя я добавил набор (CMAKE_CXX_FLAGS $ {CMAKE_CXX_FLAGS} -Wall -stdlib = libc ++ -std = c ++ 11) и установил (CMAKE_INCLUDE_PATH / usr / local / include) - person Modass; 24.10.2013