cmake и gcc компилирует каждый файл каждый раз

Я - разработчик C++ изучения, пишущий игру первоначально на платформе Mac с помощью XCode, но теперь перемещаясь в кросс-платформенный путем усиления CMake. До сих пор я мог скомпилировать его на моем неприглядном нетбуке Linux, и я соединяю dev среду на этой машине для на кодировании движения. Однако я нахожу, что 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 для всего. Мое знание Автоинструментов (делают?) и Gcc очень ограничен. Как у меня есть gcc, только перекомпилировали измененный источник?

8
задан 18 January 2010 в 10:23
поделиться

3 ответа

Я бы переписал ваши cmakelists.txt, используя Chall (возможно переместите файлы в каталоге «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})
0
ответ дан 5 December 2019 в 14:03
поделиться

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

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

7
ответ дан 5 December 2019 в 14:03
поделиться

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

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

5
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: