我是一名学习c ++开发人员,最初使用XCode在Mac平台上编写游戏,但现在通过利用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})
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经将C++作为一种语言集中在一起,而不是通过坚持使用XCode来构建系统.我对Autotools(make?)和Gcc的了解非常有限.我如何让gcc只重新编译更改的源?
你cmake每次都在重新跑步吗?如果您只修改一个源文件,则应该能够简单地重新运行make,并且它应该在链接之前仅重建一个目标文件.如果重新运行cmake,可能会将所有源文件标记为脏并重建所有内容.
仅cmake在更改正在使用的源文件的实际列表或其他类似的主要更改时重新运行.
仅重建修改后的源应该是默认行为.当然,如果您更改几乎所有依赖cpp文件所包含的中央标头,它将触发几乎完全重建.看看,如果你只修改一个CPP文件(添加注释或类似)会发生什么,如果超过了该编译单元编译那么我建议你投入更多的时间研究它最终给你我的邮件可以在配置从深层次看.
另一种可能性是你在windows下编译并使用2.8 cmake,它有一个关于这个的bug.查看2.9版本以查看是否存在该缺陷:http://www.mail-archive.com/cmake@cmake.org/msg24876.html