2017-01-01 1 views
1

나는 C++ 용으로 C 기반을 사용하는 다른 사람들이 작성한 라이브러리를 사용하고 있습니다. 헤더 파일이나 소스 파일에 사용 된 모든 포함 물은 표준 라이브러리 파일이 아니더라도 ""대신 "<> 형식으로되어 있습니다. 제 컴파일러는이를 인식하고 문제의""대신 ">"를 사용하는 방법

예는 다음 헤더 내부 오류 "파일을 찾을 수 없습니다"를 반환하지 않습니다

#ifndef _ga_ga_h_ 
#define _ga_ga_h_ 

// Make sure that we get the configuration into each of the galib components 
// that will be used. 
#include <ga/gaconfig.h> 

// These are the headers for all of the genetic algorithm classes. 
#include <ga/GASimpleGA.h> 
#include <ga/GASStateGA.h> 
#include <ga/GAIncGA.h> 
#include <ga/GADemeGA.h> 
#include <ga/GADCrowdingGA.h> 

// Here we include the headers for all of the various genome types. 
#include <ga/GA1DBinStrGenome.h> 
#include <ga/GA2DBinStrGenome.h> 
#include <ga/GA3DBinStrGenome.h> 
#include <ga/GABin2DecGenome.h> 

내가 #INCLUDE "GA를 사용하여 내 프로그램 내부에 그 헤더를 포함합니다. h "이지만 라이브러리의 모든 헤더/소스 파일 내부를 변경하는 것은 매우 어렵습니다.

컴파일러가 <> "마치"사용하는 방법이 있습니까? "Visual Studio를 사용하고 있습니다."프로젝트 속성의 "추가 포함 디렉터리"에 경로를 추가하려고 시도했지만 많은 흠집의 오류가 사라졌지만 약 30 개가 지속되었습니다. 이상한 것은 그들이 "c1xx"라는 파일에 있지만 그 파일이 없다는 것입니다!

덕분에,

+0

컴파일러 헤더 검색 경로에서 해당 헤더의 경로를 추가 할 수 있습니다. 작동하는지 여부는 구현 정의됩니다. – Unimportant

+0

include 파일의 기본 검색 경로를 설정하거나 추가하는 방법은 컴파일러와 환경에 따라 다릅니다. 커맨드 라인에서 GCC와 Clang을 사용하면'-I' (대문자 i) 옵션을 사용합니다. –

+0

어떤 컴파일러를 사용하고 있습니까? – pstrjds

답변

4

정의는은/usr/"(유닉스 계열 시스템) 및"지역 헤더에 사용되는 등이 같은 <가> 일반적으로 위치에있는 "시스템"헤더 파일에 사용되는 정도입니다 파일. 코드를 컴파일 할 때 헤더 파일을 포함하는 추가 디렉토리의 위치를 ​​나타낼 수 있습니다. GCC를 사용할 때 -I 옵션을 사용합니다. 컴파일러의 설명서에서 필요한 설정을 확인하십시오.

예. Linux 및 GCC에서 "ga"디렉토리가/usr/local/include/ga에 있으면 cc -I/usr/local/include를 사용합니다.

+0

에 복사하고 c 또는 C++과 아무 관련이 없으면'<>'대신' ""'를 사용할 수 있습니다 암호. 연결하는 동안 이름 맹 글링은 문제가 될 수 있지만. – danishansari

+0

답장을 보내 주셔서 감사합니다. 미안해, 난 멍청 하네. 좀 더 명확히 좀 해줄 수있어? 그래서 내 소스에서 다음과 같이 파일을 포함합니다 : – Peet

+0

#include "ga \ ga.h"그 파일 안에는 <> ...이 모든 포함 물이 있으므로 다음과 같이 포함시켜야합니다 : #include "- l \ ga \ ga.h "? – Peet

-2

명령 줄에서 할 경우 : 기본과 출력을 얻을 것이다

echo | gcc -v -E -x c++ - 

는 C에 대한 디렉토리를 포함 ++. 그것들은 내장 된 시스템의 검색 경로를 포함합니다.

g++ -I/some/dir -o foo foo.cpp을 사용하여 컴파일하는 경우 컴파일에 추가 포함 검색 경로()를 추가합니다.

위의 위치에있는 헤더는 #include <header>과 같은 포함 지시문에서 찾을 수 있습니다. #include "header" 지시문은 해당 위치에서 헤더를 찾을 수도 있지만 다음과 같은 경우에 더 관련이 있습니다. 당신이 #include "header"을 할 때 foo.cpp 디렉토리 검색 경로에있는 여부에도 불구하고,이 포함되어있는 경우

, 컴파일러는 먼저 foo.cpp의 디렉토리에 "헤더"상대를 찾기 위해 노력할 것입니다. 발견하지 못하면 Include 검색 경로를 검색합니다. 따라서 특정 .cpp 파일에 더 많이 연결된 헤더에 더 관련이 있으며 컴파일에 추가 포함 검색 경로가 필요하지 않거나 상대 경로와 함께 include 지시문을 사용하려는 경우

그래서 당신은 #include <header>를 사용하는 경우, header-I 플래그에서 포함 검색 경로, 시스템의 일부 또는 /some/dir에 있어야합니다. headerfoo.cpp과 관련이 있지만 검색 경로에는없는 경우 컴파일이 실패합니다.

#include "header"header을 포함하는 검색 경로가 포함되지 않은 경우에도 foo.cpp 위치와 관련된 상대 경로에서 찾을 수 있습니다.

+2

질문은 gcc가 아닌 Visual Studio에 관한 것입니다. 그리고 gcc는 C++를 올바르게 처리하지 못합니다. 그 때문에 g ++를 사용해야합니다. –

+0

@PeteBecker yo C++ 전문가. 나는 gcc를'gcc -v -E -x C++ -'에 사용했는데 이것은 C++에 대한 헤더 목록을 얻는 것이 옳으며 g ++를 다른 곳에서 사용했습니다. –

+1

@PeteBecker 그리고 질문은 Visual Studio로 표시되지 않습니다, 그는 그것을 사용하고 있습니다. 제가 설명한 것은 clang에도 적용됩니다 (그런데, 헤더의 목록을 얻는 것과 같은 방식으로 작동합니다, clang은 사용하지 않습니다). 그리고 msvc에 적용하면 아이디어가 동일합니다. –

관련 문제