# This CMakeLists.txt doesn't do anything useful, # but it shoudl demonstrate the cmake syntax highlighting # # Alex Turbov <i.zaufi@gmail.com> # #[[.rst: Demo ---- This is an **RST** documentation. :: # Sample code block blah-blah But we are about to test CMake here ;-) #]] cmake_policy(VERSION 3.11) project( Demo VERSION 1.0 DESCRIPTION "For unit testing purposes" # NOTE that particular languages is a separate style # to highlight "special" (well known values) LANGUAGES C CXX ) set(SOME_TRUE_OPTION TRUE) # `true` value # `false` value and "internal" variable set(_ANOTHER_FALSE_OPTION OFF CACHE INTERNAL "Internal option") #BEGIN Message block message(FATAL_ERROR "Ordinal message do ${VARIABLE_EXPANSION}") message(AUTHOR_WARNING "... standard variables have a dedicated style") message(SEND_ERROR "e.g. ${PROJECT_DESCRIPTION} or ${CMAKE_COMMAND}") message( STATUS [=[ Raw messages do not do ${VARIABLES_EXPANSION} or \n escape symbols highlighting... ]=] ) #END Message block # ATTENTION Every command highlight only its own named keywords... # Also, note aliased (most of the time imported) targets higlighted as well add_library(Foo::foo IMPORTED GLOBAL) set(KW_HL IMPORTED GLOBAL) # `IMPORTED` and `GLOBAL` are not highlighted here! # Properties are separate ("special value") style set_target_properties(Foo::foo PROPERTIES LOCATION "${FOO_LIBRARY}") # Generator expressions target_compile_definitions( # NOTE Ok w/ CMake >= 3.11 Foo::foo $<$<PLATFORM_ID:Windows>:WINDOWS_FOO> $<$<PLATFORM_ID:Linux>: LINUX_FOO $<$<BOOL:${_has_foo}>:SOME_FOO_PATH=${PROJECT_BINARY_DIR}/foo> > ) #[=======================================================================[.rst: .. cmake:command:: my_fun *RST* documentation ``can`` refer to :cmake:command:`any_commands` or :cmake:variable:`variables`... .. code-block:: cmake :caption: **Synopsys** my_fun([ANYTHING...]) #]=======================================================================] function(my_fun) # TODO Add implementation endfunction() my_fun( # Custom functions do not highlight "standard" named args ... PUBLIC LOCATION PARENT_SCOPE # only some well-known values ... smth-NOTFOUND ON # and standard variables PROJECT_VERSION # or substitutions $ENV{HOME} OR ${_internal_var_is_grey} ) # I dont'recall exactly, but there was some bug with `if`... if((A AND "${B}") OR C OR (var MATCHES "regex")) # Anyway... it is Ok nowadays ;-) elseif(POLICY CMP066) add_executable(${PROJECT_NAME} ${PROJECT_NAME}.cc) target_link_libraries( ${PROJECT_NAME} PRIVATE Qt5::Core $<$<BOOL:${HAS_FOO}>:Foo::foo> ) endif() # In each function call below, all 3 named parameter lines should apply the same highlighting. add_custom_command( COMMAND true COMMAND (true) COMMAND true ) add_custom_target(TargetName WORKING_DIRECTORY somedir COMMAND (true) BYPRODUCTS somefile ) execute_process( COMMAND true COMMAND (true) COMMAND true ) add_test( NAME sometest COMMAND (true) WORKING_DIRECTORY somedir ) # nested parentheses if( true AND ( false OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ) ) endif()