2010-07-16 2 views
7

최근에 Visual Studio (이 질문은 모든 컴파일러에서 동일합니다)를 구성하여 중간 .o 파일을 각 개별 프로젝트 대신 원본 트리 외부의 별도 폴더에 덤프 할 수 있다는 것을 알았습니다. 따라서 zip이나 그 라인을 따라 무언가를 보관할 때까지 프로젝트를 손쉽게 청소할 수 있습니다."out of source"빌드가 기본값이 아닌 이유는 무엇입니까?

그런 종류의 구성이 더 흔하지 않은 이유는 무엇입니까? 중요한 단점이 있습니까?

+2

확실하지 않음을 생각하지,하지만 당신 말이 맞아 , 그것은 있어야합니다. 재산 시트를 fi에 씁니다. 이것은 아마도 내가 VS 워크 플로우에 가장 많이 변경 한 것일 것입니다. – jalf

답변

2

Visual Studio에서 이 기본값 인이며 (적어도 VC++ 6만큼 먼 옛날부터) 오랫동안 사용되었습니다. 중간 디렉토리는 기본적으로 소스 디렉토리가 아닌 출력 디렉토리와 동일합니다. 즉, 모든 오브젝트 파일이 최종 출력물과 함께 배치됩니다.

실제로 컴파일러 출력을 소스 파일과 함께 배치해야하는 프로젝트로 작업하는 경우에는 약간의 조커가 필요합니다. VC++는 기본적으로 객체 파일에 해당 소스 파일과 동일한 이름을 부여하지만 (확장자가 다른 경우) 이름이 같지만 경로가 다른 여러 소스 파일이있는 경우 각 소스 파일을 컴파일하면 해당 객체를 덮어 씁니다 파일. 마지막으로 컴파일 할 파일이 "이기면"입니다.

이것은 자연적으로 빌드를 손상시킵니다.

프로젝트 전체에서 원본 파일 이름이 전역 적으로 고유하도록 요구하는 것은 실제로 매우 짜증나게합니다. 예를 들어 경로가 포함되도록 출력 위치를 변경할 수 있습니다. 링커는 여전히 옳은 일을합니다.

+0

응? 기본적으로 모든 중간 파일을 포함하는 프로젝트 폴더 아래에 Debug/Release 하위 폴더를 만듭니다. 확실히 "최종 출력물과 함께 모든 객체 파일"을 배치하지는 않습니다. 내가 "근원"이라고 부르는 것이 아닙니다. – jalf

+0

그래,하지만 그것들은 소스 파일 옆에 있지만 서브 디렉토리에는 둘 수 없다. –

+0

'IntDir'에 대해'$ (SolutionDir) \ Build \ $ (ProjectName) \ $ (PlatformToolset) \ $ (플랫폼) \ $ (구성)'을 실행하여 "마지막 컴파일 된 승리"시나리오를 해결합니다. –

1

아마도 역사적인 질문에 대한 답 일 것입니다. 첫 번째 C 컴파일러 (따라서 첫 번째 C++ 컴파일러)는 유닉스 용으로 작성되었습니다. 유닉스에는 몇 가지 예외를 제외하고는 많은 것들을위한 '표준'장소가 없다. 따라서 정상적인 방법은 다른 지시가없는 한 현재 작업 디렉토리에 모든 것을 넣는 것입니다.

+3

Visual Studio에서는 개체 파일을 현재 작업 디렉터리에 출력하지 않지만 각 프로젝트의 생성 된 폴더에 개체 파일을 덤프합니다. 문제는 단순히 솔루션으로 그룹화하지 않는 이유입니다. 플러스 마이크로 소프트는 역사적으로 다른 사람들이 어떻게했는지에 따라 정확히 어떤 일을하는 것으로 잘 알려져 있지 않다. –

+0

솔루션으로 그들을 그룹화하면 사실상 (이름 충돌과 관련된) 문제를 훨씬 더 악화시킬 수있다. 필자는 하나의 프로젝트에서 파일 이름이 충돌하는 것을 본 적이 없었지만 (사실상, 왜?), 단일 프로젝트에서 서로 다른 사람들이 유지 관리하는 프로젝트 간에는 완벽하게 가능했습니다. –

+0

@Pavel : 왜 문제가 악화 될까요?obj 파일을'$ (SolutionDir) \ obj \ $ (ProjectName)'또는 그와 비슷한 것으로 둡니다. 그리고 소스 트리 외부에있는 동안 프로젝트간에 충돌을 일으키지 않습니다. (또한 OP는 이름 충돌에 대해 무엇을 묻습니까?) – jalf

0

Qt Creator를 개발 IDE로 사용하면 버전 2에서 기본적으로 설명하는 방식으로 작동하는 '섀도우 빌드'가 활성화되어 실제로 유용합니다. VS를 켜고 끄는 단일 체크 박스이기도합니다. VS보다 약간 덜 복잡합니다.

1

외부 세계의 아이디어가 자주 침입하지 않는 진공 상태에서 VS가 개발 되었기 때문에 "Visual Studio의 첫 번째 버전에서 이러한 방식으로 빌드 파일을 구성 할 수있었습니다. 스튜디오가 아닌 선구자), 그게 언제나 사내에서 이루어졌고 아무도 외부에서 들어 와서 말한 적이 없기 때문에 "나머지 세상 사람들은 중간 쓰레기 파일과 실제 파일을 분리하려고합니다. 이 기본하지 왜 소스 코드 "는 VS 팀은 않았다. 그것은 단지 추측,하지만 난 더 나은 설명 생각할 수 없다

.이 문제였다