2011-10-07 3 views
0

우리 프로젝트에는 많은 C++ 소스가 포함되어 있습니다. 이제까지 모든 것을 빌드하기 위해 make를 부르지 만 나이가 들었습니다. 그래서 나는 waf를 우연히 만났습니다. waf는 꽤 잘 작동하고 빌드 속도를 크게 향상시킵니다. 그러나 내가 전체 빌드를 할 때마다 나는 감각을 짓지 못하는 몇 가지 빌드 오류로 끝납니다. 이제 점진적 빌드를 수행하면 대부분의 경우 처음 빌드 할 수없는 소스 중 일부가 빌드되고 나머지는 여전히 실패합니다. 다른 점진적 빌드에서는 마침내 성공적인 빌드를 얻게됩니다.C++ 빌드에서의 Waf 던짐 오류

별도의 라이브러리를 별도의 빌드로 만들려고했는데, 종속 라이브러리를 병렬로 빌드하려고 시도했지만 오류가 계속 나타나는 경우가 있습니다.

편집 : 내가 계속해서 지니고있는 오류는 내 코드와 관련이없는 것처럼 보입니다.

Build failed 
-> task failed (exit status -1): 
     {task 10777520: c constr_SET.c -> constr_SET.c.1.o} 

또 다른 "waf 빌드"후에 더 이상이 오류가 발생하지 않습니다.

EDIT2 : 내 라이브러리에 대한 빌드 단계는 다음과 같습니다

def build(bld): 
    bld.shlib(source="foo.cpp bar.cpp foobar.cpp constr_SET.c", 
    target="foobar", 
    includes= "../ifinc", 
    name="foobar", 
    use="MAIN RW HEADERS", 
    install_path = "lib/") 

주요, RW는, 헤더 우리가 사용하는 그냥 플래그와 외부 라이브러리입니다.

시스템에서 비슷한 행동을 본 사람이 있습니까? 또는 심지어 솔루션?

+0

당신은 분명히 오른쪽 (아마도 링크 단계를) 종속성을받지 못하고있어보십시오. 그러나 당신은 모범이 아니며 심지어 오류도 아닙니다. 그래서 우리는 도울 수 없습니다. – sehe

+0

물론 당신이 맞습니다. 예제로 업데이트되었습니다. 의존성에 문제가있을 수 있지만,이 오류는 서로 의존성이없는 공유 라이브러리를 빌드하는 동안 계속 발생합니다 (헤더를 중앙 디렉토리에 복사하여이 시점에서 종속성을 피합니다). – pushy

답변

1

여러 대상이 동일한 필수 개체를 동시에 작성하고 있다고 의심됩니다.

export JOBS=1 

또는

waf --jobs 1 
+0

오류가 사라지는 작업 수를 줄이면 좋습니다. 하지만 내가 뭘 잘못하고있어? 나는 내 wscript의 (잘하면) 관련 부분을 질문 텍스트에 넣었다. – pushy

+1

나는 constr_SET.c가 컴파일 된 곳, _and/or_에 constr_SET.o가 사용되는 규칙을 보여줘야한다고 생각한다. 나는 1 개 이상의 바이너리가 constr_SET.o에 링크되어 있고 필요에 따라 동시에 빌드한다고 가정한다. 이 경우, constr_SET.o에 명시 적으로 의존하는 것이 더 좋습니다. 따라서 Waf는 의존성을 알 수 있고 종속 규칙을 직렬화 할 수 있습니다. – sehe

+0

기본적으로 constr_SET.c 파일은 libs의 소스 파일 중 하나입니다. 위의 설정은 소스가 컴파일되는 곳이며, lib가 서로 의존하지 않기 때문에 소스는 lib 구축 단계에서 아무데도 사용되지 않습니다. 나중에 우리 프로세스가 빌드 될 때 우리는 lib에 의존하지만 libs와 프로세스의 빌드를 다른 빌드 그룹에 넣었으므로 그런 부작용이 발생하지 않아야한다고 생각하고 싶습니다 ... – pushy