2017-12-01 8 views
0

큰 소스 코드가있는 프로젝트에서 작업하고 있습니다. 프로젝트에 다른 유형이 있기 때문에 프로젝트가 컴파일되는 동안 makefile을 사용하여 특정 환경 변수를 포함하는 헤더 파일을 만들고 싶습니다. 나는 프로젝트가 컴파일되는 동안 일부 코드 스 니펫을 포함하고 싶지 않기 때문에 프로젝트의 어느 위치에서나 헤더 파일을 사용하고 싶다. 내가 어떻게 해?메이크 파일을 사용하여 자동 헤더 파일을 생성하는 방법

+3

먼저 언어 C 또는 C++를 선택하십시오. 이 질문에 표시된 것보다 더 많은 이유없이 이중 태그 질문을하지 마십시오. 다음으로, 어떻게 환경 변수로 헤더를 만들 계획입니까? 헤더가 존재하지 않으면 쉘 스크립트를 실행 하시겠습니까? 정보가 언제 바뀌나요? 컴파일 할 때마다? 그렇다면 매번 전체 프로젝트를 다시 컴파일 할 가능성이 있습니다. 그러나 그렇지 않으면 환경 변화가 코드에 반영되지 않을 수 있습니다. 새 헤더를 만들고 새 파일을 이전 파일과 비교하여 변경된 파일이 있으면 이전 파일을 복사합니다. –

+1

'# define '을 설정하는 경우 컴파일러에 명령 줄 인수로 매크로 값을 전달하는 것은 옵션 일 수 있습니다. '-D MYSETTING = ABC ', too –

+0

정확히, 리눅스 커널 autoconf.h처럼하고 싶습니다. –

답변

0

다음은 빠른 해결책입니다. 아이디어는 임시 .h 파일을 생성하고 무언가가 변경된 경우 실제 .h 만 업데이트하는 것입니다. 이렇게하면 매번 재건 할 수 없게됩니다. 당신이 file.h에 어떤 변수를 수정하는 경우, 그것은 에게 연관된 모든 파일을 다시 작성해야한다는

#dummy target that forces another to be run once per make invokation 
.FORCE: 

#target is run once per make 
file.h.gen: .FORCE 
     echo "FOO=$(FOO)" > [email protected] 
     echo "BAR=$(BAR)" > [email protected] 

#because file.h.gen is always updated, this is run once per make 
file.h : file.h.gen 
     rsync --checksum $< [email protected] 

참고. 원하는 경우 .h 파일을 여러 파일로 분할하여보다 세분화 된 파일을 만들 수 있습니다. 예를 들어 변수 당 헤더 파일을 만들 수 있으며 각 소스 파일에는 관심있는 변수 헤더 만 포함됩니다. 이렇게하면 필요한 파일 만 다시 빌드됩니다.