我是一名学习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})
到目前为止,我一直把C ++作为一种语言集中在一起,而不是通过坚持使用XCode来构建系统。我对Autotools(make?)和Gcc的了解非常有限。我如何让gcc只重新编译更改的源?
答案 0 :(得分:7)
您每次都在重新cmake
吗?如果您只修改一个源文件,则应该只需重新运行make
,它应该在链接之前仅重建一个目标文件。如果您重新运行cmake
,它可能会将所有源文件标记为脏并重建所有内容。
如果您更改了正在使用的源文件的实际列表或其他重大更改,则仅重新运行cmake
。
答案 1 :(得分:5)
仅重建修改后的源应该是默认行为。当然,如果您更改几乎所有依赖cpp文件所包含的中央标头,它将触发几乎完全重建。看看如果你只修改一个cpp文件(添加注释或类似文件)会发生什么,如果编译单元正在编译,那么我建议你花更多的时间调查它最终让我的电子邮件更深入地查看配置
另一种可能性是你在windows下编译并使用2.8 cmake,它有关于此的bug。查看2.9版本以查看该缺陷是否消失:http://www.mail-archive.com/cmake@cmake.org/msg24876.html
答案 2 :(得分:0)
我会使用glob重写你的CMakeLists.txt(如果你有其他的* .cpp文件,可能会移动“src”目录中的文件)并给你的项目命名(这会设置一些重要的变量):
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})
答案 3 :(得分:0)
我还使用cmake和visual studio进行了不必要的重建。该问题与不合适的x64配置参数有关:Visual Studio 2008 Unnecessary Project Building
答案 4 :(得分:0)
在许多这种情况下,一个简单的解决方案是完全擦除构建树并重新生成它(我的意思是rm -rf build && mkdir build && cd build && cmake -G "Unix Makefiles" ../src
,而不仅仅是make clean
)