Visual C ++ : 동일한 솔루션에있는 다른 프로젝트의 #include 파일


113

Visual C ++를 사용하여 게임을하고 있습니다. 별도의 프로젝트에 일부 구성 요소가 있으며 프로젝트 종속성을 설정했습니다. 다른 프로젝트의 헤더 파일을 어떻게 #include합니까? 한 프로젝트의 클래스를 다른 프로젝트에서 사용하는 방법을 모릅니다.

답변:


199

컴파일러 설정

헤더 파일을 #include하려는 프로젝트에서 다른 프로젝트 의 경로를 프로젝트 구성 의 추가 포함 디렉토리 섹션에 추가해야 합니다.

프로젝트 구성에 액세스하려면 :

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  2. 구성 속성-> C / C ++-> 일반을 선택합니다.
  3. 추가 포함 디렉터리에서 경로를 설정합니다.

포함하는 방법

헤더 파일포함 하려면 코드에 다음을 작성하면됩니다.

#include "filename.h"

추가 포함 디렉터리에 이미 디렉터리가 포함되어 있으므로 여기에서 경로를 지정할 필요가 없으므로 Visual Studio에서 찾을 위치를 알 수 있습니다.

프로젝트 설정에 모든 헤더 파일 위치를 추가하지 않으려면 한 지점까지 디렉토리를 포함시킨 다음 해당 지점을 기준으로 #include를 추가하면됩니다.

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

링커 설정

정적 라이브러리 (예 : .lib 파일)를 사용하는 경우 링커 입력에 라이브러리를 추가해야 연결시 심볼이 링크 될 수 있습니다 (그렇지 않으면 해결되지 않은 심볼이 표시됨).

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  2. 구성 속성-> 링커-> 입력을 선택합니다.
  3. 추가 종속성 아래에 라이브러리를 입력하십시오.

6
이 주제에 대한 답변을 읽은 후 아침에 내가 본 것 중 가장 명확하고 포괄적 인 답변을 드리겠습니다. 잘하셨습니다. 감사합니다!
David Hall

9
익명 사용자로부터 "라이브러리에 대한 경로를 포함 할 때 경로에 공백이 있으면 따옴표로 입력해야합니다"라는 제안이있었습니다. 누구에게나 도움이된다면 주석으로 추가하십시오.
iDev

2
정적 라이브러리를 포함하는 한 가지 추가 방법은 솔루션의 "프로젝트 종속성"내에서 프로젝트를 연결할 정적 라이브러리의 종속성으로 구성하는 것입니다. 내 프로젝트 중 하나가 올바르게 연결되는 이유를 파악하는 데 시간이 오래 걸렸습니다. 다른 하나는 아니 었습니다. 이것이 그 이유였습니다.
Stuart Wood

3
다른 프로젝트의 소스 파일 디렉토리와 함께 "추가 포함 디렉토리"를 사용하는 것은 끔찍한 아이디어가 될 수 있음을 지적하고 싶습니다. 다른 프로젝트에는 동일한 이름의 파일이있을 수 있습니다 (각 파일에 대해 미리 컴파일 된 헤더를 사용하는 경우 매우 가능성이 높음). 개인적으로 저는 프로젝트 소스 파일의 상위 폴더를 추가하는 것을 선호하므로 최소한 직접 지정할 수 있습니다 (예 : #include "proj2\include.h". 솔루션 당 여러 프로젝트를 갖는 것은 매우 다르게 사용되기 때문에 NET 언어로 매우 향하는 것 같습니다. 그러나 C ++ 프로젝트에서이를 극복 할 수있는 좋은 방법을 찾지 못했습니다.
Deji 2014

18
이것은 약간 조잡합니다. VS는 자동으로 많은 일을 할 수 있습니다. 경로를 하드 코딩하는 것보다 더 나은 솔루션이 없다고 믿기 어렵습니다. 프로젝트 종속성 설정 등이 좋을 수 있습니다.
Cookie

4

#include프로젝트와 관련이 없습니다. 전처리기에 "헤더 파일의 내용을 여기에 넣으십시오"라고 알려줍니다. 올바른 위치를 가리키는 경로 (../your_file.h와 같은 상대 경로 일 수 있음)를 제공하면 올바르게 포함됩니다.

그러나 이러한 프로젝트를 제대로 연결하려면 라이브러리 (정적 / 동적 라이브러리)에 대해 배워야합니다.하지만 그것은 또 다른 질문입니다.


3

두 프로젝트가 동일한 솔루션에 있기 때문에 https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp-에 설명 된대로 포함 파일 및 링커에 대한 더 간단한 방법이 있습니다. 프로젝트? view = vs-2019 :

  1. 포함은 상대 경로 (예 #include "../libProject/libHeader.h") 로 작성 될 수 있습니다 .
  2. 링커의 경우 "참조"를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭 한 다음 다른 프로젝트를 선택합니다.

멋지고 간단하지만 헤더를 포함하는 모든 곳에 상대 경로가 필요하다는 것은 너무 나쁩니다.
yoyo

2

프로젝트 속성의 헤더 경로를 설정해야 컴파일러가 헤더 파일을 찾으려고 할 때 거기를 찾습니다. 정확한 위치를 기억할 수 없지만 프로젝트 속성을 살펴보면 볼 수 있습니다.


위치는 속성> C / C ++> 일반> 추가 포함 디렉터리에있을 수 있습니다.
Mustafa Kemal

0

절대적이든 상대적이든 #include 지시문에서 전체 경로 참조를 피하십시오. 대신 프로젝트 설정에서 다른 프로젝트의 포함 폴더 위치를 추가하십시오. 필요한 경우 경로 참조에 하위 폴더 만 사용하십시오. 이렇게하면 코드를 업데이트하지 않고도 쉽게 이동할 수 있습니다.


0

@Benav의 답변을 확장하면 선호하는 접근 방식은 다음과 같습니다.

  1. 포함 경로에 솔루션 디렉토리를 추가하십시오.
    • 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
    • 속성 선택
    • 드롭 다운에서 모든 구성 및 모든 플랫폼을 선택합니다.
    • C / C ++> 일반을 선택하십시오.
    • 추가 $(SolutionDir)포함 디렉터리에 추가
  2. 사용하려는 각 프로젝트에 대한 참조를 추가하십시오.
    • 솔루션 탐색기에서 프로젝트의 참조를 마우스 오른쪽 단추로 클릭하십시오.
    • 참조 추가 ...를 선택합니다.
    • 참조하려는 프로젝트를 선택하십시오.

이제 다음과 같이 참조 된 프로젝트의 헤더를 포함 할 수 있습니다.

#include "OtherProject/Header.h"

노트:

  • 여기에서는 솔루션 파일이 Visual Studio로 프로젝트를 만들 때 기본 조직인 각 프로젝트에서 한 폴더 위로 저장되어 있다고 가정합니다.
  • 이제 포함 할 수 있는 바람직하지 않을 수있다 솔루션 폴더, 상대 경로에서 파일을하지만 접근 방식의 단순함에 대한 이걸로 확인 해요.
  • 2 단계는 #includes에 필요하지 않지만 원하는대로 올바른 빌드 종속성을 설정합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.