cmake & gcc компилирует каждый файл каждый раз - PullRequest
8 голосов
/ 18 января 2010

Я учусь на c ++ разработчике, пишу игру изначально на платформе Mac с использованием XCode, но теперь перехожу на кроссплатформенность, используя CMake. Пока я могу скомпилировать его на своем нетбуке с ickle linux, и я собираю среду разработки на этой машине для кодирования на ходу. Однако я обнаружил, что gcc перекомпилирует каждый файл всякий раз, когда я делаю изменения. Ясно, что мне нужна дополнительная настройка для CMakeLists.txt. Мой текущий очень прост. Вот так;

cmake_minimum_required (VERSION 2.8)
set (source
Creature.cpp
DisplayManager.cpp
Engine.cpp
EngineState.cpp
Entity.cpp
GameWorld.cpp
GfxSFML.cpp
Item.cpp
Map.cpp
Position.cpp
Projectile.cpp
ScreenTile.cpp
SquadAI.cpp
Terrain.cpp
UIButton.cpp
UICharPanel.cpp
UIView.cpp
Utility.cpp
Weapon.cpp
fov.cpp
main.cpp
)

find_package (OpenAL)
find_package (OpenGL)
find_package (SFML)

set(CMAKE_CXX_FLAGS "-g -Wall -pg")
add_executable (tractionedge ${source})
target_link_libraries(tractionedge ${SFML_LIBRARY} ${OPENGL_LIBRARY} ${OPENAL_LIBRARY})

До сих пор я концентрировался на C ++ как на языке, а не на сборке систем, придерживаясь XCode для всего. Мои знания об Autotools (make?) И Gcc очень ограничены. Как мне сделать так, чтобы gcc перекомпилировал только измененный исходный код?

Ответы [ 5 ]

7 голосов
/ 10 февраля 2010

Вы перезапускаете cmake каждый раз? Если вы просто измените один исходный файл, вы сможете просто перезапустить make, и он должен перестроить только один объектный файл перед установкой ссылки. Если вы перезапустите cmake, он может пометить все исходные файлы как грязные и перестроить все.

Повторно запускать cmake можно только в том случае, если вы измените фактический список используемых исходных файлов или другие важные изменения, подобные этому.

5 голосов
/ 18 января 2010

Восстановление только измененных источников ДОЛЖНО быть поведением по умолчанию. Конечно, если вы измените центральный заголовок, включенный почти во все зависимые файлы cpp, это вызовет почти полное перестроение. Посмотрите, что произойдет, если вы измените только один файл cpp (добавив комментарий или тому подобное), если компилируется больше, чем этот модуль компиляции, тогда я предлагаю вам потратить больше времени на его исследование, что в конечном итоге даст мне EMail более глубокий взгляд на конфигурацию .

Другая возможность состоит в том, что вы компилируете под windows и используете 2.8 cmake, в котором есть ошибка, связанная с этим. Посмотрите на версию 2.9, чтобы увидеть, если этот дефект исчез, то: http://www.mail-archive.com/cmake@cmake.org/msg24876.html

0 голосов
/ 14 июня 2013

Простое решение во многих из этих случаев - полностью стереть дерево сборки и восстановить его (и я имею в виду что-то вроде rm -rf build && mkdir build && cd build && cmake -G "Unix Makefiles" ../src, а не только make clean)

0 голосов
/ 10 января 2011

Я также испытал ненужные пересборки, используя cmake и visual studio.Проблема связана с неправильным параметром конфигурации x64: Ненужное построение проекта Visual Studio 2008

0 голосов
/ 20 января 2010

Я бы переписал ваш CMakeLists.txt с помощью glob (возможно, переместил файлы в каталог "src", если у вас есть другие файлы * .cpp) и дал бы вашему проекту имя (это устанавливает некоторые важные переменные):

cmake_minimum_required (VERSION 2.8)
project(TRACTION)
file (GLOB TRACTION_SOURCES *.cpp)
find_package (OpenAL)
find_package (OpenGL)
find_package (SFML)

set(CMAKE_CXX_FLAGS "-g -Wall -pg")
add_executable (tractionedge ${TRACTION_SOURCES})
target_link_libraries(tractionedge ${SFML_LIBRARY} ${OPENGL_LIBRARY} ${OPENAL_LIBRARY})
...