2013-07-17 4 views
1

나는 각각의 서브 디렉토리에 C++ 프로그램들을 가지고있다. 각 하위 디렉토리에는 여러 파일의 단일 C++ 프로그램 (각 클래스의 .h 및 .cpp 파일과 주 .cpp 프로그램)이 있습니다. 각 프로그램을 컴파일하여 해당 하위 디렉토리에 실행 파일을 저장하려고합니다. (또한 각 프로그램을 실행하고 해당 출력을 해당 하위 디렉토리에있는 파일로 리디렉션하고 싶지만 컴파일 작업을 수행 할 수 있다면이 부분을 파악하는 데 문제가 없어야합니다.)모든 하위 디렉토리에서 다중 파일 C++ 프로그램을 컴파일하려면 어떻게해야합니까?

저는 UNIX 시스템에서 bash 쉘을 사용하고 있습니다. 실제로는 Windows상에서 실행되는 UNIX 에뮬레이터 Cygwin입니다.

나는 현재 디렉토리에서 하나의 파일로 된 프로그램을 컴파일하기위한 짧은 스크립트를 웹에서 찾을 수 있었지만 지금까지 얻은 것까지입니다. 그 스크립트는 다음과 같습니다.

for f in *.cpp; 
    do g++ -Wall -O2 "$f" -o "{f/.cpp/}"; 
done; 

누군가 정말로 나를 도와 주시면 감사하겠습니다. 평균 2 주에 한 번이 작업을 수행해야합니다 (연속 8 주 이상, 8 주 동안 등).

답변

0

모든 직접적인 하위 디렉토리가 모두 C++ 프로그램이라고 가정하면

for D in */; do cd "$D"; 
    # then either call make or call your g++ 
    # with whatever arguments in here 
    # or nest that script you found online if it seems to 
    # be doing the trick for you. 
    cd ../; 
done; 

각 디렉토리에 이동합니다 그 ... 이것에 약간의 변화를 사용하고 밖으로 뒤로 이동 (당신이이 원하는 무엇이든) 그 일을.

3

masochistic이 아니라면 쉘 스크립트 대신 makefile을 사용하십시오.

(분명히) 각각의 실행 파일이 같은 디렉토리에있는 모든 .h.cpp 파일에 의존하기 때문에, 메이크는 작성하기 쉬운 것입니다 - 각각 같은 것이다 :

whatever.exe: x.obj y.obj z.obj 
    g++ -o whatever.exe x.obj y.obj z.obj 

당신은 또한을 추가 할 수 당신이 실행 파일을 실행 make run를 사용합니다으로

run: 
    whatever.exe 

: 각 목표는 결과 실행 파일을 실행합니다.

그러면 루트 디렉토리에 각 하위 디렉토리의 대상을 반복적으로 만드는 makefile을 만들고 (위에서 설명한대로) 각각을 실행합니다.

여기에는 몇 가지 좋은 점이 있습니다. 주로이 작업을 위해 실제로 만들어 졌으므로 실제로 잘 수행됩니다. 또 다른 점은 파일의 타임 스탬프를 기록하므로 실제로 필요한 실행 파일 만 다시 빌드된다는 것입니다. 즉, 실행 파일이 종속 된 파일 중 적어도 하나가 실행 파일 자체가 작성된 이후 수정 된 위치).

+0

메이크 파일의 도움을 받아야합니다. 스스로 makefile을 작성하고 싶지 않다면 make 파일을 생성하는 데 사용할 수있는 cmake를 사용할 수 있습니다. 또한 http://www.cmake.org/를 참조 할 수 있습니다. – Saby

관련 문제