Syntax only build support (-fsyntax-only)
It would be great if there was a syntax only build mode. Some the issues and benefits are discussed in this old email conversation.
Here is a hacky, brittle, mostly untested, and unix only approach to doing this right now:
option(SYNTAX_ONLY "only check syntax (-fsyntax-only)" OFF)
if(SYNTAX_ONLY)
if (NOT ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR
(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")))
message(FATAL_ERROR
"only clang and gcc support -fsyntax-only, using ${CMAKE_CXX_COMPILER_ID}")
endif()
add_compile_options(-fsyntax-only)
set(CMAKE_CXX_COMPILE_OBJECT "${CMAKE_CXX_COMPILE_OBJECT} && touch <OBJECT>")
set(CMAKE_CXX_CREATE_SHARED_LIBRARY "touch <TARGET>")
set(CMAKE_CXX_CREATE_SHARED_MODULE "touch <TARGET>")
set(CMAKE_CXX_LINK_EXECUTABLE "touch <TARGET>")
set(CMAKE_CXX_ARCHIVE_CREATE "touch <TARGET>")
set(CMAKE_CXX_ARCHIVE_APPEND "touch <TARGET>")
set(CMAKE_CXX_ARCHIVE_FINISH "touch <TARGET>")
# copy paste for c, qt, cuda, etc...
# cuda also requires:
set(CMAKE_CUDA_COMPILE_PTX_COMPILATION
"${CMAKE_CUDA_COMPILE_PTX_COMPILATION} && touch <OBJECT>")
set(CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
"${CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION} && touch <OBJECT>")
set(CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
"${CMAKE_CUDA_COMPILE_WHOLE_COMPILATION} && touch <OBJECT>")
set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE "touch <TARGET>")
set(CMAKE_CUDA_DEVICE_LINK_LIBRARY "touch <TARGET>")
set(CMAKE_CUDA_DEVICE_LINK_COMPILE "touch <TARGET>")
endif()