Для моего проекта xcode у меня настроены cocoapods, где он использует Eigen 3.2.5 из моего клонированного репозитория. У меня это настроено где
"source_files": ["Eigen/*", "Eigen/**/*"],
"public_header_files": ["Eigen/*", "Eigen/**/*"],
потому что кажется, что если у меня есть другой проект, который включает этот проект, он не будет работать, если я не сделаю эти файлы общедоступными.
Однако всякий раз, когда я делаю такую установку, LLVM 7.0, кажется, пытается получить неправильные заголовочные файлы. Например, у меня есть Block.h
в моем eigen
Pod, и он пытается скомпилировать C ++ Block.h
за UIKit
(что полностью объективно-C и, конечно, он потерпит неудачу, потому что в eigen есть тонна кода C ++ Block.h
). Обратите внимание, что UIKit
также использует Block.h
(то же имя, что и в Eigen), но, очевидно, речь идет о Block.h
это полностью в Objective-C.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h:11:9: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h:11:
Как мне это исправить, чтобы UIKit.h
ищет в правильном месте для своего Block.h
а не внутри моего собственного кокоапода?
В качестве альтернативы, как мне настроить мой собственный Cocoapod Eigen так, чтобы, если Проект A использует собственный, но Проект B использует проект A как Cocoapod, то проект B НАСТОЯЩИЙ находит собственный и не жалуется, что «Собственные файлы, такие как Eigen / Dense не могут быть найденным»?
В случае, если кому-то интересно, решение состояло в том, чтобы назвать все открытые заголовочные файлы с соответствующим окончанием файла (Dense
-> Dense.h
). Кроме того, после этого у меня есть рабочая версия Podspecs, которой я поделюсь, так как это заняло у меня больше недели, чтобы начать работать.
Pod::Spec.new do |s|
s.name = "eigen"s.version = "3.2.5"s.summary = "Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms."s.homepage = "http://eigen.tuxfamily.org/index.php?title=Main_Page"s.license = { :type => "MPL2",
:file => "COPYING.LGPL" }
s.author = "Benoît Jacob", "Gaël Guennebaud"s.source = { :git => "YOUR OWN CLONED GIT REPO FROM MERCURIAL", :tag => "3.2.5" }
s.ios.deployment_target = "5.0"
s.compiler_flags = '-DEIGEN_MPL2_ONLY'
s.source_files = "Eigen/*.*", "Eigen/**/*.*"s.public_header_files = 'Eigen/*.h'
s.header_mappings_dir = 'Eigen'
s.dependency 'boost/numeric-includes', '~> 1.59.1'
s.dependency 'boost/preprocessor-includes', '~> 1.59.1'
s.xcconfig = {
'HEADER_SEARCH_PATHS' => '"${PODS_ROOT}/eigen"',
}
end
Других решений пока нет …