2016-06-15 3 views
2

make와 sub make를 통해 컴파일되는 각 파일에 하나의 고유 번호를 할당하려고합니다. 이를 위해 나는 export varName = 1를 사용하여 최고 수준의 메이크업에서 변수를 내 보낸 다음이 하위 메이크 파일에서 호출 할 때 문제가 varName 다시 1으로 초기화됩니다메이크 파일의 전역 변수

$(eval varName=$(shell echo $$(($(varName)+1)))) 

다음 사용하여 컴파일 된 각 .c 파일에 대해 증가지고 최상위 메이크 파일

하위 메이크 파일을 호출하는 동안 어떻게 마지막으로 업데이트 된 값을 유지할 수 있습니까?

+0

왜 이렇게하고 싶습니까? 더 좋은 방법이있을 수 있습니다. –

+0

표준 사전 정의 된 매크로 (__FILE__, __LINE__)와 비슷한 사용자 정의 매크로를 정의하려고합니다. __FILE__ 매크로는 파일 이름을 제공합니다. 이와 비슷한 것은 __FILENUMBER와 같은 것을 구현하여 파일의 고유 정수를 제공하고 싶습니다. -DFILE_NUMBER = fileNum을 사용하여이 특정 C 파일을 지정할 수 있습니다. 여기서 fileNum은 Make를 통해 컴파일되는 각 파일마다 다릅니다. 다른 제안은 환영했습니다. 감사합니다. –

+0

그래서'foo.c '가 파일 번호 35를 얻는다면, 이것은 에 35 번째 파일 이었음을 의미합니다. 그리고이 번호를'foo.o'에 컴파일합니까? 다음 번에는 컴파일 할 168 번째 파일 일 수 있습니다. 아니면 컴파일되지 않을 수도 있고'bar.c'는 대신 35 번을 얻습니다. 그래서'foo.o'와'bar.o'는 모두 35 번을 갖습니다. 어떻게 생각이 맞는 지 알 수 없습니다. –

답변

0

변수를 내보내는 것만으로 하위 메뉴가 자체 변수 테이블을 초기화하는 복사본을 제공 할 수 있습니다. 따라서 값 변경 내용을 되돌릴 수 없습니다.

진정한 전역 변수를 만들려면 파일 또는 데이터베이스 테이블에 유지되는 카운터를 증가시키는 외부 프로그램이나 스크립트를 호출 할 수 있습니다. 그러나 하위 프로세스를 순차적으로 실행하지 않고 동시에 시작하는 경우 문제가 발생할 수 있습니다. 이로 인해 병렬 액세스가 생겨서 재현 할 수없는 번호 매김 시퀀스가 ​​생길 수 있습니다.

sub-make를 사용하는 경우에는 objections in general이 있습니다. 편집마다 외부 프로세스를 추가로 만들면 시간이 많이 걸립니다.