2008년 10월 20일 월요일

cmake 에서 LDFLAGS 를 타겟별로가 아닌 전체값을 바꾸기

CMAKE_EXE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS

변수 참고.
전에도 한번 쓴적이 있는데 까먹고 있었네


지금 cmake 로 크로스컴파일 세팅중인데
cmake 가 제안하는 방법대론 죄다 오류가 나길래
그냥 환경변수쪽에서 CC=arm-elf-gcc 잡아주고
CMakeLists.txt 에서 아래 코드 추가해서 대강 돌리고 있다.

# 크로스컴파일 관련 기능들이 이상하게 돌길래 일단은 크로스컴파일을
# 할때마다 CC 환경변수를 잡아주는 식으로 개발중이다. CMAKE_C_COMPILER
# 를 확인해봐서 arm 이란 말이 보이면 -elf2flt 를 옵션에 추가하자.
if(CMAKE_C_COMPILER MATCHES "arm")
# 바이너리 만들때만 넣어주면 되겠지
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -elf2flt)
# -rdynamic 옵션을 꺼버렸다. 끄기전에 message 로 찍어보니 이 옵션
# -하나길래 걍 "" 로 바꿔버렸지.
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
endif(CMAKE_C_COMPILER MATCHES "arm")

회식시간이군.
나중에 재작성.
...
...

증상에 대해서 좀더 자세히 적어둘려고 했는데 귀찮네
버그같은데 어차피 패치될테고.
혹시나 해서 대강 적어두자면

cmake 2.4 시절에는 크로스컴파일을 공식적으로 지원을 안해서 그냥 컴파일러를 나타내는 변수 CMAKE_C_COMPILER 등을 강제로 다른걸로 바꾸고 돌리면 문제가 없었는데 2.6 때 크로스컴파일을 지원한다고 하더니 위 값을 바꾸면 캐시가 어쩌구 하면서 값을 되돌리고 다시 설정을 돌리더라. 내가 코드상에 값을 다시 바꿔놨으니 이게 계속 반복되면서 무한루프를 타더군.. 위 링크 문서에 보면 강제로 컴파일러를 세팅하는 force 뭐시기도 있는데 이것도 마찬가지로 무한루프질을 하고.. 쉘상에서 CC 를 아예 바꾸고 cmake 를 돌릴때만 문제가 없었다. 이게 버그 맞겠지 아니면 내가 잘못 쓴건가.. 그리고 ccache 랑도 같이 쓰고 싶은데 이것도 좀 후지게 도는 문제가 있더라.








댓글 없음: