2016-09-27 3 views
0

나는 C++ 도서관이 있고 약간 C++ 정체가 있습니다. 라이브러리는 C++ 정적 초기화 실패로 어려움을 겪을 수 있습니다. 빌드 도중 *.o 파일의 순서를 무작위로 지정하여 예측할 수없는 번역 단위 종속성을 확인하려고합니다. 무작위로 표적을위한 목표를 만드십시오

본인은 GNU 설명서에 2.3 How make Processes a Makefile을 방문 그것은 나에게 말한다 :

목표는 궁극적으로 업데이트하기 위해 노력을 할 대상이다. 명령 줄을 사용하여이 동작을 무시할 수 있습니다 (목표 지정 인수 참조) ...

나는 또한 9.2 Arguments to Specify the Goals을 따랐지만 치료는 제공되지 않았습니다. 그것은 나를 놀라게하지 않았다.

목표를 무작위로 만들 수 있습니까? 그렇다면 어떻게해야합니까?

그렇지 않은 경우 다른 방법이 있습니까? 이것은 테스트 환경에 있기 때문에 GNUmake보다 더 많은 도구를 사용할 수 있습니다.

미리 감사드립니다.

답변

2

이것은 실제로 구현에 따라 정의되지만 GNU Make는 왼쪽에서 오른쪽으로 대상을 처리합니다. -j (이것은 한 병렬 메이크업을 사용하지 않는으로 보유

RAND_OBJS := $(shell shuf -e -- $(OBJS)) 
random_build: $(RAND_OBJS) 

:

당신이 무작위 할 개체가있는 OBJS 변수, 당신은 (예를 들어 shuf 사용)과 같이 쓸 수있는 말 선택권). 당신이 여전히 주문을 무작위로하지만, 그것은 또한 일자리 수, 시스템 부하, 달의 현재 위상 등에 따라 달라질 것입니다.

+0

감사합니다. Andrea. 우리는'-j' 옵션을 사용합니다. 그게 불가능하다는 뜻인가요? '-j'의 중요성이'RAND_OBJS'에 대한 것인지는 분명하지 않습니다. 솔직히, 각 작업 스레드가 목록의 머리에서 당겨서 무작위로 구성된 목록을 상상해보십시오. – jww

+0

죄송합니다, 나는 명확하지 않았습니다. 그것은 여전히 ​​무작위 화 될 것이지만, 물론 shuf로부터 주문을 왜곡 할 스레드가있을 것입니다. 이것은 당신이 신경 쓰지 않는 것이지요. 사실, 당신이 해결하려고하는 문제는 일반적으로 (init 섹션이 init 배열에 병합 될 때) 링크 할 때 발생하기 때문에 링크 순서를 랜덤 화하기에 충분해야합니다. –

+0

예, 정확하게 ... 'SOURCES' 및'OBJECTS'에 대한 기록을 남기므로 문제가 간신히 필요합니다. – jww