C++ 排除CMake中的系统包含路径

C++ 排除CMake中的系统包含路径,c++,cmake,clang,C++,Cmake,Clang,有没有办法告诉CMake排除某些系统包含路径 例如,我定义了两次string.h,一次在/usr/include/c++/v1(libc++)中,一次在/usr/include/中,编译时出现以下错误: error: functions that differ only in their return type cannot be overloaded 因为在每个文件中都可以找到char*strchr(const char*\uu s,int\uu c)函数 我只想使用libc++中的一个 我

有没有办法告诉CMake排除某些系统包含路径

例如,我定义了两次string.h,一次在/usr/include/c++/v1(libc++)中,一次在/usr/include/中,编译时出现以下错误:

error: functions that differ only in their return type cannot be overloaded
因为在每个文件中都可以找到
char*strchr(const char*\uu s,int\uu c)
函数

我只想使用libc++中的一个

我尝试了
set(CMAKE\u IGNORE\u PATH)/usr/include“
,但是当我在详细模式下使用clang编译时,我仍然看到搜索路径中使用了“/usr/include”

编辑:

使用以下CMakeLists.txt

project(my_lib)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
set(SOURCES my_lib.cpp)
add_library(my_lib STATIC ${SOURCES})
set(CMAKE_DEBUG_TARGET_PROPERTIES INCLUDE_DIRECTORIES)
我有以下输出:

[ 50%] Building CXX object CMakeFiles/my_lib.dir/my_lib.cpp.o
clang version 4.0.1-6 (tags/RELEASE_401/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.2.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0
Candidate multilib: .;@m64
Selected multilib: .;@m64
 "/usr/lib/llvm-4.0/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name my_lib.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -v -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /media/sf_wncd-app/wasm/cmake/build_linux/CMakeFiles/my_lib.dir/my_lib.cpp.gcno -resource-dir /usr/lib/llvm-4.0/bin/../lib/clang/4.0.1 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward -internal-isystem /usr/include/clang/4.0.1/include/ -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-4.0/bin/../lib/clang/4.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /media/sf_wncd-app/wasm/cmake/build_linux -ferror-limit 19 -fmessage-length 228 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o CMakeFiles/my_lib.dir/my_lib.cpp.o -x c++ /media/sf_wncd-app/wasm/cmake/my_lib.cpp
clang -cc1 version 4.0.1 based upon LLVM 4.0.1 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/include"
ignoring duplicate directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0"
ignoring duplicate directory "/usr/include/clang/4.0.1/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0
 /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_64-linux-gnu/c++/7.2.0
 /usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward
 /usr/include/clang/4.0.1/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
[100%] Linking CXX static library libmy_lib.a
[100%] Built target my_lib
我得到了完全相同的输出<代码>/usr/include仍然存在。我猜CMAKE\u IGNORE\u PATH对系统路径不起作用?

如果我接受,那么CMAKE的答案将是用于指定自定义GCC工具链

参考资料


您能给我一个建议吗?像这样的东西很难复制。您只需添加
set(CMAKE\u DEBUG\u TARGET\u属性包括\u目录)
即可检查,例如,它是否来自代码中的某个定义或链接包。顺便说一句,我对重复函数的最初问题来自使用clang编译时混合使用的
-stdlib=libc++
-fms兼容性
选项。如果没有这些选项,它可以很好地编译。我可以在clang中使用
-nostdinc
,不在标准系统目录或编译器内置目录中搜索包含文件。但这取决于编译器。
project(my_lib)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v")
set(SOURCES my_lib.cpp)
set(CMAKE_IGNORE_PATH "/usr/include")
add_library(my_lib STATIC ${SOURCES})
set(CMAKE_DEBUG_TARGET_PROPERTIES INCLUDE_DIRECTORIES)