모든 필수 패키지가 전달되었다고 가정하여 sudo apt-get install
My BuildRoot는 openwrt
.
그 후 나는 폴더 위의 디렉터리 이름을 바꾸고 다음 openwrt
과 같이 파일을 약간 변경하면 발견했습니다.wifi.lua
만들다(폴더 내 openwrt
) 성공적으로 컴파일하는 데 21분이 걸립니다.
그러나 폴더 위의 디렉터리 이름을 바꾸지 않고 openwrt
동일한 파일에서 유사한 사소한 변경을 수행하면 다음V=99로 만들기성공적으로 컴파일하는데 3분밖에 걸리지 않습니다.
이제 위 디렉토리의 이름을 바꾸고 위와 동일한 작업을 다시 수행하면만들다성공적으로 컴파일하는 데 21분이 소요됩니다. 그리고V=99로 만들기, 최상위 디렉터리의 이름을 바꾸지 않은 경우보다 더 많은 컴파일 단계가 수행되는 것을 볼 수 있습니다.
최상위 디렉터리의 이름을 바꾸지 않으면 Makefile이 훨씬 빠르게 컴파일되는 것을 볼 수 있습니다.
이로 인해 관련 질문이 생깁니다. Linux에서 디렉터리 이름을 바꾸거나 디렉터리를 이동하면 하위 디렉터리의 파일 시간이 변경됩니까?
수정 시간이 모든 종속성보다 새로운 경우 Makefile이 대상을 다시 빌드하지 않는다는 것을 알고 있습니다.
나는 또한 GNU Makefile에 관한 몇 가지 질문을 읽었습니다. http://www.conifersystems.com/whitepapers/gnu-make/
OpenWrt Makefile은 원래 Linux Makefile보다 훨씬 더 발전된 것으로 예상됩니다. 이러한 문제 중 일부 또는 전부를 해결합니까?
(Makefile을 더 빠르게 컴파일하기 위해 openwrt/dl
홈 디렉토리에 있는 폴더에 대한 심볼릭 링크도 사용하여 사용자 공간 tarball을 다시 다운로드할 필요가 없었습니다.)
답변1
아니요, 포함된 파일과 디렉터리의 타임스탬프는 변경되지 않고 디렉터리 자체의 타임스탬프만 변경됩니다. 그러나 Makefile에 절대 경로를 사용하는 대상이나 종속성이 포함되어 있거나 $(src_dir)
이를 다시 생성하는 경우에는 다른/새 대상이 됩니다. 바라보다GNU make 문서"표준" 대상 및 변수에 관한 규칙 및 권장 사항입니다.
그러나 Makefile이 컴파일되지 않고 원래 Linux Makefile이 존재하지 않습니다. BuildRoot와 같은 환경을 생성/유지하는 것은 복잡하므로 유지관리자는 효율적으로 구축하기 전에 먼저 올바르게 구축하는 데 집중할 수 있습니다. 간단한 패치(심볼릭 링크 추가 등)가 프로세스 속도를 높이는 데 도움이 된다면 개선 제안으로 업스트림으로 보내야 할 수도 있습니다.
답변2
man make의 jobs 옵션을 사용하여 make를 실행할 수 있습니다:
-j [jobs], --jobs[=jobs]는
동시에 실행되는 작업(명령) 수를 지정합니다. -j 옵션이 여러 개 있는 경우 마지막 옵션이 적용됩니다. -j 옵션을 인수 없이 지정하면 make는 동시에 실행할 수 있는 작업 수를 제한하지 않습니다.
답변3
다음을 수행하십시오. 24개의 스레드가 있는 매우 큰 머신입니다. 128GB RAM. 모든 것을 구축하십시오 /dev/shm
. 그것을 사용 make -j22
하면 화상을 입을 것입니다. 기기를 끄면 모든 것이 사라지므로 구성을 저장해야 합니다.