2017-12-12 55 views
1

CMakeにいくつかのシステムインクルードパスを除外するよう指示する方法はありますか?CMake内のシステムインクルードパスを除外

は、例えば私はstring.hの、二度定義した後では/ usr// C++/V1を含む(のlibC++)と一度では/ usr /含む/私はコンパイルするとき、私は、次のエラーがあります

error: functions that differ only in their return type cannot be overloaded 
char *strchr (const char *__s, int __c)関数が各ファイルに存在するため、

があります。

私はlibC++のものだけを使いたいです。

私はset(CMAKE_IGNORE_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 

そして、私が使用します。

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) 

を私が得ました全く同じ出力。 /usr/includeはまだそこにあります。私はCMAKE_IGNORE_PATHがシステムパスで動作しないと思いますか?

+0

あなたは[MCVE]お願いできますか?このようなものは再現するのが難しいです。例えば ​​'set(CMAKE_DEBUG_TARGET_PROPERTIES INCLUDE_DIRECTORIES)'を追加するだけで、例えば以下のようにチェックすることができます。あなたのコードやリンクされたパッケージの定義から来ている場合。 – Florian

+0

ところで、私の最初の問題は、clangを使ってコンパイルするときに '-stdlib = libC++'と '-fms-compatibility'オプションを混ぜたものです。これらのオプションがなければ、うまくコンパイルされます。 – Thomas

+0

私はclangで '-nostdinc'を使用して、標準システムディレクトリやコンパイラ組み込みディレクトリでインクルードファイルを検索することはできません。しかし、これはコンパイラに依存します。 – Thomas

答えて

関連する問題