From 5743f71b42bd1f112a653ee6a42c9b88a99e97e6 Mon Sep 17 00:00:00 2001 From: TimePath Date: Sat, 2 Sep 2017 18:06:24 +1000 Subject: [PATCH] CMake: really rebuild if the compiler changes --- CMakeLists.txt | 59 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e5fc791f..9a66f9fd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,9 +8,18 @@ add_custom_target(${all}) set(checks qc-checks) add_custom_target(${checks}) -# depend on qcc -if (TARGET gmqcc) - add_dependencies(${checks} gmqcc) +if (gmqcc_BINARY_DIR) + set(compilerinfo "${gmqcc_BINARY_DIR}/gmqcc.h") + add_custom_command( + OUTPUT "${compilerinfo}" + DEPENDS "${gmqcc_BINARY_DIR}/gmqcc" + VERBATIM + COMMAND ${CMAKE_COMMAND} -E + md5sum "${gmqcc_BINARY_DIR}/gmqcc" > "${compilerinfo}" + ) + add_custom_target(qcc ALL + DEPENDS "${compilerinfo}" + ) endif () add_dependencies(${checks} data-check-cvars) @@ -45,6 +54,25 @@ add_custom_target(qc-whitespace VERBATIM COMMAND ./tools/whitespace.sh ) +function(prog name dir) + add_executable(${name} qcsrc/${dir}/progs.inc) + add_dependencies(${all} ${name}) + add_dependencies(${name} ${checks}) + add_dependencies(${name} qcc) + set_source_files_properties(qcsrc/${dir}/progs.inc PROPERTIES OBJECT_DEPENDS "${compilerinfo}") +endfunction() + +function(set_prelude target prelude) + get_target_property(MY_PROJECT_SOURCES ${target} SOURCES) + foreach (source IN LISTS MY_PROJECT_SOURCES) + set_property( + SOURCE ${source} + APPEND PROPERTY COMPILE_FLAGS + "-include ${prelude}" + ) + endforeach () +endfunction() + include_directories(qcsrc) add_definitions(-DXONOTIC=1) @@ -75,33 +103,16 @@ set_source_files_properties( HEADER_FILE_ONLY FALSE ) -add_executable(csprogs qcsrc/client/progs.inc) -add_dependencies(${all} csprogs) -add_dependencies(csprogs ${checks}) +prog(csprogs client) target_compile_definitions(csprogs PRIVATE -DGAMEQC -DCSQC) +# set_prelude(csprogs "${PROJECT_SOURCE_DIR}/qcsrc/lib/_all.inc") -add_executable(progs qcsrc/server/progs.inc) -add_dependencies(${all} progs) -add_dependencies(progs ${checks}) +prog(progs server) target_compile_definitions(progs PRIVATE -DGAMEQC -DSVQC) -add_executable(menu qcsrc/menu/progs.inc) -add_dependencies(${all} menu) -add_dependencies(menu ${checks}) +prog(menu menu) target_compile_definitions(menu PRIVATE -DMENUQC) -function(set_prelude target prelude) - get_target_property(MY_PROJECT_SOURCES target SOURCES) - foreach (source IN LISTS MY_PROJECT_SOURCES) - set_property( - SOURCE ${source} - APPEND PROPERTY COMPILE_FLAGS - "-include ${PROJECT_SOURCE_DIR}/${prelude}" - ) - endforeach () -endfunction() -# set_prelude(csprogs qcsrc/lib/_all.inc) - function(copy prog) add_custom_command(TARGET ${prog} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$/${prog}.dat" "${prog}.dat" -- 2.39.2