【发布时间】:2014-04-06 09:37:12
【问题描述】:
我的命令:
/usr/bin/c++ -fPIC -I/Users/me/project/include -I/usr/local/include/opencv \
-I/usr/local/include -I/opt/local/include -std=c++11 -O3 -M -c \
/Users/me/project/src/program.cpp | grep opencv
program.cpp 有:
#include "opencv2/core/core.hpp"
#include "opencv2/ml/ml.hpp"
输出:
/opt/local/include/opencv2/core/core.hpp \
/opt/local/include/opencv2/core/types_c.h /usr/include/assert.h \
/usr/include/math.h /opt/local/include/opencv2/core/version.hpp \
/opt/local/include/opencv2/core/operations.hpp \
/opt/local/include/opencv2/core/mat.hpp \
/opt/local/include/opencv2/objdetect/objdetect.hpp \
/opt/local/include/opencv2/ml/ml.hpp \
但是,存在:/usr/local/include/opencv2/core/core.hpp 和 /usr/local/include/opencv2/ml/ml.hpp。
使用-v 标志,clang 告诉我:
ignoring duplicate directory "/usr/local/include"
as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:
/Users/me/project/include
/usr/local/include/opencv
/opt/local/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1
/usr/local/include
/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
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
尽管/usr/local/include 在命令的-I 目录列表中排在第一位,为什么clang 包含来自/opt/local/include 而不是/usr/local/include?为什么/usr/local/include会被优先级列表下推。
【问题讨论】:
-
尝试颠倒收录顺序,你会得到答案
-
@user2485710 你的意思是把
-I/opt/local/include -I/usr/local/include/opencv -I/usr/local/include?这并不能解决问题。/usr/local/include仍会在-v生成的包含路径列表中列出/opt/local/include。 -
它们不包含相同的标题,您是否使用简约的源代码尝试过这种方式? stackoverflow.com/a/6685693/2485710
-
搜索目录的内容不应该影响-v产生的搜索顺序。 (而且,它们确实包含相同的标题,尽管这并不重要。)我认为你不理解我的问题。
-
那个测试只是冗长的编译,忘记你对文件的看法,只需将源代码提供给`gcc',看看真正使用了哪些文件。
标签: clang include-path