2012-10-09 3 views
-1

저는 유닉스 소스를 가지고 있는데, VS에서 작동하려고합니다. 모든 #include는 사용자 정의 헤더 경로에 따라 코딩되어 있습니다. 예 : #include <myheader>이지만 myheader는 ..\headers\myheader.hpp과 같은 프로젝트 폴더에 있습니다.하위 디렉토리의 C++ 파일에 포함 된 모든 경로의 경로를 수정합니다.

모든 C++ 파일을 반복적으로 검사하고 하위 디렉토리에있는 헤더와 함께 #include를 수정하는 유틸리티가 있습니까?

예를 들어, 그것은

#include "..\headers\myheader.hpp" 

#include <myheader> 

을 변환 할 것인가?

+1

당신의 인생을 8 ^) 일부 지점에서 이것의 사용을해야합니다 내기

find . -name \*.cpp -exec sed -i -e 's/old/new/g' {} \; 

과 같을 것이다 ? – x13n

+0

#includes의 일부로 디렉토리 경로를 포함하면 안됩니다. 코드 기반이 지저분하고 깨지기 쉽고 유지 관리가 어렵습니다. 올바른 해결책은 필요한 #include를 찾을 수 있도록 컴파일러의 검색 경로를 지정하는 것입니다. –

+0

@ x13n 경로를 하드 코딩하기 때문에 그렇게 할 이유가 없습니다. 코드 작성자는 우선 상대 경로를 사용해야합니다. (또한 약 50 개의 디렉토리가 있으며 각 경로가 포함되어야합니다. 처음부터 올바른 방법 대신 그렇게하기 위해 낭비합니다.) – AbstractDissonance

답변

5

난 당신이 추가하는 것이 좋습니다 것 (잠재적 중복 헤더에 대해 걱정할 필요가 없습니다 ...) (다른 나는 엉망의 비트이기 때문에 계층 구조를 평평하게해야한다) headers 디렉토리를 프로젝트 옵션의 어딘가에 포함 경로에 추가하십시오.

+0

완료해야 할 모든 파일이 포함에 대한 상대 경로를 사용해야하는 경우 50 개 경로를 포함하지 않을 것입니다. 나는 내 자신의 유틸리티를 만들어야 할 것 같아요 – AbstractDissonance

+0

당신은 50 개 이상의 디렉토리에 헤더를 흩어져 있습니까? 레이아웃을 수정하는 것을 고려해야합니다. 하나의 디렉토리에 파일을 포함시키고 다른 하나 (또는 ​​하나 이상)에 소스를 포함하는 것이 더 일반적입니다. –

+0

그것은 명확하지 않을 수도 있지만 VS에서 "유닉스"소스에 의해 내가 다운로드 한 것임을 의미했습니다. – AbstractDissonance

0

헤더 경로에 대해서는 다른 포스터에 동의합니다.

파일에서 특정 패턴을 재귀 적으로 바꿔야하는 경우에는 과 sed을 사용하는 방법을 배워야합니다 (Unixoid OS를 사용하는 경우에 대비하여).

귀하의 경우이 솔루션은 당신이 왜 그냥 컴파일러 헤더 경로를 추가하지

+0

실제로 질문에 대답하는 것이 좋은 생각이지만, 나는 그것을'VS'가 유닉스에서 돌아 가지 않는다고 생각한다. 물론, cygwin가 있지만 ... –

+0

흠, 나는 발견에 익숙하지만 sed는 들어 본 적이 없다. 나는 그것을 살펴볼 것이다. 그러나 당신이 뭔가 잘못되었을 때 파일을 쉽게 망칠 수있는 간결한 명령 줄 유틸리티를 사용하는 것보다 작은 유틸리티를 작성하는 것이 일반적으로 더 쉽다. 어떤 경우라도 find 또는 sed를 사용하여 헤더 파일의 상대 경로를 찾는 방법을 볼 수 없습니까? (당신은 그들을 찾아야 해) – AbstractDissonance

관련 문제