2012-01-29 7 views
1

CMake를 처음 사용했습니다. 따라서, 나는 상당히 작고 관련이 있기 때문에 분리 된 쓰레드로 나누고 싶지 않은 몇 가지 질문을 가지고있다. 길고도 짧은 이야기,의이 연결 호출을 살펴 보자 :빌드 디렉토리에 CMake 링크 및 부산물

/D/Software/MinGW/bin/g++.exe -fmessage-length=0 -mfpmath=sse -msse2 -msse3 -mssse3 -msse4 -fopenmp -g -Wl,--whole-archive CMakeFiles/go.dir/objects.a -Wl,--no-whole-archive -o go.exe -Wl,--out-implib,libgo.dll.a -Wl,--major-image-version,0,--minor-image-version,0 /D/Software/Qt/4.8.0/lib/libQtOpenGLd4.a /D/Software/Qt/4.8.0/lib/libQtGuid4.a /D/Software/Qt/4.8.0/lib/libQtCored4.a -lglu32 -lopengl32 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 
  1. 왜 CMake는 컴파일 옵션링크 옵션을 추가하는 경향이있다? 인스턴스의 경우이 경우 SSE 옵션은 단순히 관련성이 없습니다.
  2. 왜 이상한 도서관에 연결합니까 kernel32, winspool, shell32, ole32, uuid, comdlg32, advapi32? 내가 QMake와 같은 프로젝트를 만들었을 때 -이 라이브러리들 중 아무 것도 없었습니다. 또한, 나는 도 이러한 것들의 목적을 모른다. 그래서 이것들은 라이브러리가 중복 된 것처럼 보이거나 잘못 되었습니까?
  3. 링크 된 목록 개체 파일을 볼 수 없습니다. 그러나, 나는 이 -Wl,--whole-archive CMakeFiles/go.dir/objects.a -Wl,--no-whole-archive -o go.exe -Wl,--out-implib,libgo.dll.a 부분을 알지 못한다. 그러나 모든 객체 파일은 인데 objects.a에 보관되어 있으므로이 부분을 연결하면 은 본질적으로 객체 파일의 명시 적 목록과 동일하지 않습니까?
  4. 나는 그것에 대해 걱정할 필요가 없습니다 것 같아요,하지만 난 빌드 폴더에 대해 궁금 해요 - 너무 많은 쓰레기를 밖으로 :

enter image description here

이가 CMake의 동작을 것입니다 빌드 프로세스의 많은 부산물을 생산합니까? 또한 나는 완전히 a.exe에 대해 혼란스러워합니다. 그게 뭐죠? 왜 내 빌드 디렉토리에 상주해야합니까?

+0

MinGW/GCC의 부산물 일 수 있습니까? 링커의 프론트 엔드로 g ++을 사용하는 것이 일반적입니다. -Wl 옵션은 실제 링커에 전달됩니다 ... –

답변

1

WRT 4)

a.exe를 파일 (또는보다 구체적으로는 폴더 상주) CMake 특정 컴파일러 기능의 존재를 결정하는 데 이진처럼.

어쨌든 당신이 거기있는 파일의 양은 CMake에 완벽하게 잘 보입니다. 그들 중 일부는 진보 된 디버깅에 유용합니다. 구성 및 빌드 프로세스에서 어떤 것이 실패하면 CMake가 좋은 상태로 유지할 수 있다고 생각합니다.