2013-03-18 2 views
1

나는 서로 관련이없고 하나 하나의 파일에만있는 많은 C++ 프로그램을 가지고있다. 디렉토리 구조는 다음과 같습니다 : 나는 그들 모두를 컴파일하고 실행 파일을 다른 이름을주고 쉘 스크립트를 마련하기 위해 노력하고있어찾기를 사용하여 모든 하위 디렉토리의 모든 파일을 컴파일하려면 어떻게해야합니까?

dir1 
    program1.cpp 
    program1.h 
    program2.cpp 
    program2.h 
dir2 
    program3.cpp 
    program3.h 
    program4.cpp 
    program4.h 
dir3 
    program5.cpp 
    program5.h 
    program6.cpp 
    program6.h 
.. 

. 나는 find과 같이 이것을 시도하고있다 :

find . -type f -name *.cpp -exec g++ -llibname '{}' \; 

이 모든 파일을 컴파일하지만, 그래서 나는 결국 하나의 실행으로 끝날 각 파일에 대해 a.out 생성합니다. 파일 확장명을 제거하고 실행 파일 이름으로 제공하려면 어떻게합니까?

답변

3

당신은 같은 것을 할 수있다 (예를 들어, program1.cpp 위해 나는 g++ program1.cpp -o program1 필요) :

find . -type f -name '*.cpp' -exec sh -c 'g++ {} -o $(basename {} .cpp)' \; 

이 당신의 명령을 실행 디렉토리에있는 모든 실행 파일을 넣어 것입니다. ,

find . -type f -name '*.cpp' -exec sh -c 'g++ {} -o $(dirname {})/$(basename {} .cpp)' \; 

이 (파일 이름 패턴을 인용하는 것을 잊지 마십시오, 그렇지 않으면 당신의 명령은 당신이 이제까지의 .cpp 파일이있는 경우 깨는 시작됩니다 : 당신이 아니라 원본 파일과 같은 디렉토리에 보관하려는 경우,이 그것을해야 . 현재 디렉토리)

+0

이 좋은 작품, 덕분에 많은 .. – none

1

는 또한 시도 할 수 있습니다 :

find . -type f -name '*.cpp'| sed 's/.cpp$//' | xargs make 
+0

나는'xargs를이 부분을 make' 이해하지 않습니다. 나는이 프로그램을위한 makefile이 없다. – none

+0

'make/path/to/xyz'는 디폴트로'gcc /path/to/xyz.cpp -o/path/to/xyz'를 실행하려고합니다 ... 시도해보십시오 .. 적어도 우분투에서 작동합니다 .. – anishsane

+0

'xyz' 폴더에서'make xyz'을 시도하면'cc linux64 xyz.c -o xyz' 그리고'cc : error : linux64 : No such file or directory'를 시도합니다. 어쨌든'linux64'를 제거 할 수 있다면이 파일도 사용할 수 있습니다. 꽤 재미있는 것들 btw, +1 – none

관련 문제