2010-03-31 1 views
0

솔라리스 10의 CC를 사용하여 makefile을 작성하려고합니다. [그 첫 번째 비트만이 중요하다고 생각합니다]. 나는 foo.o에 대한 다음과 같은 규칙이 있습니다 '.'#include 사각형 만들기

foo.o: foo.cc common_dependencies.h 
    CC -c foo.cc -I../../common 

불행하게도, common_dependencies.h은 이름없는 디렉토리에, 특이한 쓰레기의 모든 종류의 포함을 또는 '../../common'. 이것은 의존성 경로를 모두 제거하는 무차별 한 메이크 파일 일 뿐인가? 종속성은 모두 '../ ..'아래에 있지만 때로는 1 수준 아래로, 때로는 2 수준 아래로 내려갑니다. 헤더 파일이 여러 디렉토리에서 소스 파일 사이에 공유하는 경우

고마워요 닐

답변

0

일반적으로, 그들은 프로젝트 루트 아래 include/ 트리에 보관 한 다음이가 나무를 포함 추가 -I$(TOPDIR)/include 같은 것을 사용 포함 경로 및 소스 파일을 다음과 같이 에 넣으십시오.

#include "foo/bar.h" 
+0

이것은 일반적 일 수 있지만 David이 설명한 경우에는 유지되지 않습니다. – Beta

+0

사실, 괜찮습니다. 우리는 엄청나게 엉망인 유산을 재사용하고 있습니다. 우리는 그것을 기반으로하지 않았으므로 자유를 가져 와서 모든 것을 말하고 완료하면 로컬 복사본을 만들었습니다. 그래서, 나는 좀 더 가사일을 할 것입니다. – David

0

이 문제는 일반적으로 의미가 있습니다. 프로젝트 조직 및 도구 (autoconf 등)를 도울 수있는 많은 컨벤션이 있지만 제작자가 이러한 것들을 이용하지 않았다면 모든 것을 사냥하고 -I 자신을 설치해야 할 것입니다.

gcc -M 또는 makedepends 또는 많은 유사한 도구 중 하나를 사용하여 필요한 디렉터리 목록을 얻을 수 있습니다. 아마도 추출물을 스크립트로 작성할 수도 있습니다.

+0

나는 관용적 인 사용법 인 CC-xM1을 사용했지만, STDERR (즉, CC -xM1 foo.cc> 의존성)에 위선자 검색을 덤프하면 모든 포함 된 것을 찾을 수 있고, 어떤 것도 얻을 수 없다. 찾을 수없는 파이썬으로 만들면 가장 자연 스럽지만 시간이 걸릴 수도 있습니다. 그리고 탄젠트를 시작하기 전에 커뮤니티 체크를하고 싶었습니다. – David

+0

감사하지만, 나는 의견에 감사드립니다. – David

0

#include 지시어에 경로를 지정하는 것은 좋지 않습니다. 특정 디렉토리 구조에 따라 헤더와 헤더에 의존하는 모든 것을 만듭니다. common_dependencies.h 자체를 정리할 수 있는지 여부를 알아내는 것이 좋습니다.

common_dependencies.h의 경로가 올바른 경우 Makefile은 그대로 작동하지만 ("../ .."이 아닌 절대 경로를 사용하는 것이 좋습니다) Advanced Auto-Dependency Generation과 같은 것을 사용할 수 있습니다 의존성을 처리하십시오.

common_dependencies.h의 경로가 올바르지 않으면 예 #includes, 인 모든 파일을 찾아야하며 그 파일의 위치가 충분하지 않으면이 될 수 있습니다. false 경로가있는 파일을 #include하는 경우 컴파일러에 -I_correct_path가 있어도 컴파일이 중단되므로 common_dependencies.h를 수정하거나 디렉토리 구조를 수정해야합니다 (파일을 이동, 복사 또는 링크하여 수정) .

+0

이 코드 덩어리는 유닛 테스트의 호프처럼 최신이 아닌 개정 내역 [//B.Lah의 디버그 명령문 12/01을 제외한 마지막 변경 사항 '94]을 사용하여 하나의 디렉토리에 블롭으로 시작되었습니다. , 예를 들어]. 의존성을 쉽게 발견 할 수 있으며, 모두 덩어리의 일부이지만, 대부분의 품질 관행을 혼란스럽게합니다. 후자에 영향을주기 위해 조직적인 변화를주기를 바라고 있습니다.[그리고 심각하게 숨겨져 있기 때문에 common_dependencies.h를 리팩터링하는 것을 포함 할 수 있습니다.] 감사합니다. 조언을 받아서 추천을 받았습니다. – David