Связывание CMake и побочные продукты в каталоге сборки - PullRequest
1 голос
/ 29 января 2012

Я новичок в 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. Думаю, мне не нужно об этом беспокоиться, но мне любопытно, папка build - столько мусора там:

enter image description here

Предполагается ли поведение CMake для генерации такого количества побочных продуктов процесса сборки? Также я полностью запутался в a.exe - что это? Почему он должен постоянно находиться в моем каталоге сборки?

1 Ответ

1 голос
/ 09 августа 2012

по 4)

Файлы a.exe (или, точнее, папки, в которых они находятся) выглядят как двоичные файлы CMake, используемые для определения существования определенных функций компилятора.

В любом случае количество файлов, которые у вас есть, выглядит отлично для CMake. Некоторые из них действительно полезны для расширенной отладки, если что-то в процессе конфигурации и сборки не удалось, и я думаю, что это хорошая практика CMake, чтобы поддерживать их.

...