방안이 3개정도 있었다.
1근데 상용프로그램을 사용해서 브랜치따서 관리를 하자니 금전적으로 타격받고..
2국가별로 ifdef로 나누자니 코드가 더러워지고..
3그렇다고 솔루션을 국가별로 나누자니 일의 효율이 엄청 떨어지고 (국가마다 빌드하면 시간도 잡아먹고)
3개를 다 커버칠 방안이 없었다.
1번 방법은 일단 제거. 금전적 타격은 없다.
3번 방법도 제거. 일의 효율이 너무 떨어져서 빌드만 하다가 작업은 못하겠다. 미국은 이거 들어가고 중국은 이거 안들어가고.. 대만은 저거 들어가고 하면
빌드도 다 따로하고 소스도 제각각이라..
2번 방법에서 좀 더 쉽게 가는 방법을 택했다.
오래전에 약간 비슷한 상황이 있었다.
사람별로 자기가 한 것만 빌드되게 할려고 ifdef 나눈적이 있었는데 딱 자기가 한 일들을 구분시켜놔야 했었던 상황이였다. (마지막까지 각자의 ifdef를 남겨놓고 실행이 되야되는 끔찍한 상황)
그때는 공용으로 쓰는 Common defines(나누는 시점은 처음이니까 아무것도 없는) 헤더파일에 자기가 작업한 내용을 #define OO작업이라고 선언하고 ifdef로 걸어서 작업을 했다.
이 상태로 머지를 하면 결국 모든 사람들의 작업물이 define이 걸려서 결국 최종본이 실행되서 내 작업만은 볼 수가 없다.
그렇다고 업데이트 받을때마다 내껏만 남기고 다른 사람 define 지우고 빌드를 해서 볼 수도 없는 노릇이다.
그럼 커밋할때 common defines만 빼고 커밋을 하면 내 common defines는 계속 유지되니까 참조해서 써도 되긴 된다.
그렇게 할 경우엔 svn 상에서는 common defines는 빈 헤더파일로 지속되는데 작업하는 중간과정을 볼때마다 임시로 모든 작업한 common defines를 수동으로 합쳐서 결과물을 봐야한다. 그때 커밋을 해서 중간결과물을 보면 여태까지 common defines를 비우고 쓴게 의미가 없다.
그래서 svn상에서 common defines헤더파일이 사람들이 작업한 defines가 계속 올라가면서 내것만 볼려고 배치파일을 하나 만들었다.
외부에 폴더를 하나 만든 뒤 if exist commondefines헤더파일이면 그냥 스킵, else robocopy commondefines헤더파일, 외부폴더 common defines파일을 다시 프로젝트 내의 common defines로 robocopy 하는 배치파일을 만들었다.
그리고 빌드 전 이벤트에 이 배치파일을 걸어 놓고 실행시키게 했다.
간단하게 요약하면
1. commondefines 헤더 파일에 define으로 내작업 다 쓰고 #ifdef로 실제 작업함.
2. 작업 다 끝났으니까 빌드 전 이벤트에 배치파일 걸고 빌드함. 내꺼 결과물 확인하고 외부폴더에 commondefines 헤더 파일 생김.(내 작업만 들어있음)
3. 다했으니까 업데이트 커밋검. 다른 사람들define작업물도 포함된 commondefines 헤더파일이 생김.
4. 다시 빌드해서 원래 commondefines.h로 돌리거나 외부에 내작업만 들어있는 commondefines.h에만 작업 define을 선언.(그냥 빌드했음. 작업할때 헷갈려서)
5. 또 작업끝나면 빌드해서 실행하고 내 작업만 확인한 후 업데이트 커밋.
이랬었었다.
여기에 착안해서 파이썬으로 국가별 선택할수 있는 다이얼로그를 하나 만들어서 빌드 때 국가별로 선택해서 빌드가 될 수 있게 하면 좋지않을까 싶다. 물론 내가 결정할수 있는 사항은 아니다...
'뻘소리' 카테고리의 다른 글
아직까진 Premake가 CMake보다 편하다.. (0) | 2019.11.06 |
---|---|
Loop Unrolling (0) | 2018.01.15 |
Multi/Sub Object Material (0) | 2018.01.04 |
플로킹 (0) | 2018.01.02 |
TLS (0) | 2017.12.28 |