makefile 만들 때 동일한 이름의 소스코드가 여러곳에 존재하는 경우 우선순위 정하기
개인적으로 수치해석 코드를 하나 만들고 있습니다 (fortran 90 기반)
코드 구조야 다른 코드들이 다 그러하듯 공통적으로 쓰일 파일들은 Src 디랙토리 아래에 넣어놓고, 초기값을 주거나 경계조건을 주는 등 문제 고유의 성격을 정해주는 .f90 파일이나 .data 파일은 각각 문제 이름에 해당하는 디랙토리르 따로 생성하여 거기 넣어주는 식으로 정리했습니다.
예를들어, main.f90 이라는 파일은 공통으로 필요하여 Src 디랙토리에,
어떤 물리 문제를 정의하는 initial.f90 파일은 Problem1 디랙토리에 넣어놓고 Problem1 디랙토리에서 make를 하면 Src의 main.f90를 불러와서 initial.f90 와 함께 컴파일 시키는 것이죠.
여기까지야 매우 쉬운데요,
어떤 문제의 특성에 의해 main.f90를 조금 손봐야 할 경우 Src 디랙토리에 있는 main.f90를 Problem1 디랙토리에 복사해서 거기서 수정을 하는 식으로 (Src의 원본은 보존한 채로) 처리를 할 수 있게 하고 싶습니다.
그렇게 하려면
1. 필요한 파일들의 목록들을 Makefile 이 모두 알고있어야 하고
2. 현재 디렉토리에서 목록들에서 해당하는 파일들을 찾은 다음
3. 나머지를 Src에서 찾는
식으로 구성해서 main.f90 가 필요하다는걸 알고, 현재 디랙토리인 Problem1 에 main.f90 이 있을 경우 Src의 main.f90는 무시하게 만들어야 하는데, 워낙 아는게 적어 쉽지가 않네요 ㅠㅠ 혹시 조언해주실 분이 있을까 싶어 질문올렸습니다.
현재는 위와 같은 경우 Makefile을 그 때 그 때 수정하면서 주먹구구식으로 하고 있습니다.
----(Src 의 main.f90를 쓸 경우의 Problem1 디랙토리에 있는 Makefile)-----
...
SOURCE = \
initial.f90 \
../Src/main.f90 \
...
-----(Problem1 디랙토리에서 main.f90 를 수정한 경우) ------
...
SOURCE = \
initial.f90 \
main.f90 \
------------------------------------------------------------
사실 필요한 파일이 엄청 많은 것도 아니고, 그 때 그 때 Makefile 수정하는게 그렇게 번거롭지도 않지만, 뭔가 자동적으로 하게 만들 수 있을 것 같은데 잘 안되니까 오기로 자동화시키고 싶은 욕구가 커져서 질문드립니다..ㅋㅋ
cmake를 한번 사용해 보시면 어떨까요?
cmake를 한번 사용해 보시면 어떨까요?
아마 신세계를 경험하시지 않을까 싶습니다.
Makefile을 가지고 온갖 삽질을 하면 생각보다
Makefile을 가지고 온갖 삽질을 하면 생각보다 많은 일을 할 수 있긴 하지만, 공학적인 가치가 있는지 모르겠습니다.
한번 짜놓고 다시는 안 고치고 쓰기만 할 거라면 모르겠지만요.
이런 non-trivial한 작업을 할 때에는 다른 툴을 알아보는 게 도움이 되지요. 물론 진입장벽이 Make보다 다소 높다는 점은 부정할 수 없습니다.
파이썬이 익숙하시다면 scons도 알아보세요
https://scons.org/
참고하세요...
VPATH 또는 vpath 를 사용하면 될거 같습니다만...
복잡한 내용은 저도 잘 모릅니다. 이럴땐 메뉴얼을 봐야죠...
https://www.gnu.org/software/make/manual/make.html#Selective-Search
댓글 달기