2009-09-30 2 views
7

scons는 파일 mod 시간이 아닌 MD5 해시를 사용하여 종속성을 작성해야하는지 결정합니다.scons의 "touch"에 해당합니까?

기본 동작이되도록하고 싶습니다. 그러나 다른 파일을 만들기 위해 파일을 편집하는 것 외에도 특정 파일이 오래된 파일 ("터치"에 해당)이라고 가정하도록 강제하는 방법이 있습니까?

편집 : 사용 사례 :

이진 파일 F (이 손상되었다, 또는 내가 그것을 편집) 또는 도구 X 변경 어떤 이유로 파일 G에 대한 도구 X를 사용하여 다른 파일 G를 만드는 데 사용됩니다 변경되었고, 파일 G와 그것의 모든 다운 스트림을 다시 만들고 싶습니다.

편집 : 이것은 가끔 사용하기위한 것입니다. 나는이 일이 항상 일어나기를 원하지 않는다. 내가 그것을 구할 때 몇 번 밖에. 또한 나는 특정 파일을 미리 알지 못할 수도 있습니다. 이런 이유로 특정 파일을 만들기 위해 SConscript/SConstruct 파일을 수정하고 싶지 않습니다.

scons {something to specify file foobar.h} 

하고 그냥 scons를 입력하면 MD5를 사용하여 일반 빌드를 할 것입니다 반면, foobar.h에 따라 모든 파일을 구축 할 SCons는 강제 것 종속성 검사에 해시 : 내가 원하는 것은 명령 프롬프트에서이 작업을 수행하는 것입니다 . SConscript/SConstruct 파일을 미리 편집하여 (사용자 정의 Decider, 내가 추측 할 수 있도록) 편집 할 필요는 없습니다. 이렇게하면 빌드 시간이 크게 늘어나지 않습니다.

답변

4

Scons의 --interactive 옵션을 보았습니까? 특정 대상을 지우고 빌드 할 수 있습니다.

man page describing this.

+0

허, 나는 결코 알지 못했다. - 인터 액티브, 반복 빌드로 시간을 절약 할 수있다. 감사! 나는 내가 원했던 것을 위해 사용할 수 있다고 생각한다. –

+0

컴파일에 대한 새 호출을 실제로 실행하려면 scons'--interactive --no-cache'를 수행해야합니다. 그렇지 않으면 대화 형 명령'build'는 캐시에서만 선택하고 컴파일러는 사용하지 않습니다. –

1

직접 할 방법이 없다고 생각합니다. 해당 소스 파일에 test.o()을 만든 경우 명백한 출력이있는 경우 test.o을 제거하면 소스 파일을 다시 컴파일해야합니다.

여러 개의 다른 소스 파일에 포함되어있는 test.h을 터치하고 싶다면 전체 프로젝트를 정리하여 모든 것이 재구성되도록하는 것이 좋습니다.

그렇다면 파일 종속성을 처리하는 방법을 선택할 수있는 Decider() function에 대해 읽어 보시기 바랍니다. 프로젝트의 특정 파일에 대해 사용자 정의 결정 함수를 선택할 수도 있습니다. 따라서 touch을 작성하고 다시 빌드 할 수있는 일부 글로벌 헤더 파일이 있으면이를 수행 할 수 있습니다.

업데이트 : 최신 질문에 대답하려면 G 파일을 삭제하면됩니다. Scons는 다음에 빌드 할 때 X를 실행하여 F에서 파일을 다시 만듭니다.

0

전체 날짜가 시간 분 및 초까지 끝나는 더미 대상 파일을 만듭니다. 그런 다음 다른 단계를이 더미 대상 파일에 종속시킵니다. 빌드 단계가 재 컴파일 될 때마다 md5 값이 변경되어 후속 단계가 다시 컴파일됩니다. 또는 더미 타겟을 제거 할 수 있으며 다시 타겟을 다시 컴파일합니다.

필자는 EDA 빌드 플로우의 모든 단일 단계에서 모든 결과를 예측할 수 없기 때문에 개인적으로 매우 유용하다고 생각합니다. 또한 유지 보수 비용으로 인해 모든 빌드 단계의 모든 산출물을 예측하려고하지 않습니다.

Greg가 언급 한 Decider() 함수는 scons와 유사하지만 개인적으로 timestamp 파일을 갖고 싶습니다.

0

SConstruct 파일에 파일을 나타내는 Node를 추출하십시오. 이 후 노드를 사용할 수 있어야합니다.always_build (true) 그것이 빌드되었는지 확인하기 위해, 나는 이것도 부양 가족을 다시 강제로 만들 것이라고 생각합니다.

+0

감사합니다,하지만 난 항상이 일을하지 않으려는 (은 드물지만 심하게 필요한 작업이다), 그리고 내가 SConstruct/SConscript 파일을 수정하고 싶지 않아, 난 그냥하는 방법을 원하는 한 번만 다시 작성하여 특정 파일이나 파일 및 종속 파일을 다시 작성하도록합니다. –