File indexing completed on 2024-05-19 15:23:13
0001 <!DOCTYPE html> 0002 <html><head> 0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 0004 <title>highlight.cmake</title> 0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (CMake) - Theme (Breeze Dark)"/> 0006 </head><body style="background-color:#232629;color:#cfcfc2"><pre> 0007 <span style="color:#7a7c7d;"># This CMakeLists.txt doesn't do anything useful,</span> 0008 <span style="color:#7a7c7d;"># but it shoudl demonstrate the cmake syntax highlighting</span> 0009 <span style="color:#7a7c7d;">#</span> 0010 <span style="color:#7a7c7d;"># Alex Turbov <i.zaufi@gmail.com></span> 0011 <span style="color:#7a7c7d;">#</span> 0012 0013 <span style="color:#2980b9;background-color:#153042;">#[[.rst:</span> 0014 <span style="color:#7a7c7d;">Demo</span> 0015 <span style="color:#7a7c7d;">----</span> 0016 0017 <span style="color:#7a7c7d;">This is an </span><span style="font-weight:bold;">**RST**</span><span style="color:#7a7c7d;"> documentation.</span> 0018 0019 <span style="color:#2980b9;">::</span> 0020 0021 <span style="color:#2980b9;"> # Sample code block</span> 0022 <span style="color:#2980b9;"> blah-blah</span> 0023 0024 <span style="color:#7a7c7d;">But we are about to test CMake here ;-)</span> 0025 0026 <span style="color:#2980b9;background-color:#153042;">#]]</span> 0027 0028 <span style="font-weight:bold;">cmake_policy</span>(<span style="color:#27ae60;">VERSION</span> <span style="color:#2980b9;">3.11</span>) 0029 0030 <span style="font-weight:bold;">project</span>( 0031 Demo <span style="color:#27ae60;">VERSION</span> <span style="color:#2980b9;">1.0</span> 0032 <span style="color:#27ae60;">DESCRIPTION</span> <span style="color:#f44f4f;">"For unit testing purposes"</span> 0033 <span style="color:#7a7c7d;"># </span><span style="color:#81ca2d;background-color:#4d1f24;font-weight:bold;">NOTE</span><span style="color:#7a7c7d;"> that particular languages is a separate style</span> 0034 <span style="color:#7a7c7d;"># to highlight "special" (well known values)</span> 0035 <span style="color:#27ae60;">LANGUAGES</span> <span style="color:#27ae60;">C</span> <span style="color:#27ae60;">CXX</span> 0036 ) 0037 0038 <span style="font-weight:bold;">set</span>(SOME_TRUE_OPTION <span style="color:#30a030;">TRUE</span>) <span style="color:#7a7c7d;"># `true` value</span> 0039 <span style="color:#7a7c7d;"># `false` value and "internal" variable</span> 0040 <span style="font-weight:bold;">set</span>(<span style="color:#27aeae;">_ANOTHER_FALSE_OPTION</span> <span style="color:#e05050;">OFF</span> <span style="color:#27ae60;">CACHE</span> <span style="color:#27ae60;">INTERNAL</span> <span style="color:#f44f4f;">"Internal option"</span>) 0041 0042 <span style="color:#7a7c7d;">#BEGIN Message block</span> 0043 <span style="font-weight:bold;">message</span>(<span style="color:#27ae60;">FATAL_ERROR</span> <span style="color:#f44f4f;">"Ordinal message do </span><span style="color:#f67400;">${VARIABLE_EXPANSION}</span><span style="color:#f44f4f;">"</span>) 0044 <span style="font-weight:bold;">message</span>(<span style="color:#27ae60;">AUTHOR_WARNING</span> <span style="color:#f44f4f;">"... standard variables have a dedicated style"</span>) 0045 <span style="font-weight:bold;">message</span>(<span style="color:#27ae60;">SEND_ERROR</span> <span style="color:#f44f4f;">"e.g. </span><span style="color:#f67400;">${</span><span style="color:#c09050;">PROJECT_DESCRIPTION</span><span style="color:#f67400;">}</span><span style="color:#f44f4f;"> or </span><span style="color:#f67400;">${</span><span style="color:#c09050;">CMAKE_COMMAND</span><span style="color:#f67400;">}</span><span style="color:#f44f4f;">"</span>) 0046 <span style="font-weight:bold;">message</span>( 0047 <span style="color:#27ae60;">STATUS</span> <span style="color:#f44f4f;">[=[</span> 0048 <span style="color:#f44f4f;"> Raw messages do not do ${VARIABLES_EXPANSION} or \n</span> 0049 <span style="color:#f44f4f;"> escape symbols highlighting...</span> 0050 <span style="color:#f44f4f;"> ]=]</span> 0051 ) 0052 <span style="color:#7a7c7d;">#END Message block</span> 0053 0054 <span style="color:#7a7c7d;"># </span><span style="color:#e85848;background-color:#451e1a;font-weight:bold;">ATTENTION</span><span style="color:#7a7c7d;"> Every command highlight only its own named keywords...</span> 0055 <span style="color:#7a7c7d;"># Also, note aliased (most of the time imported) targets higlighted as well</span> 0056 <span style="font-weight:bold;">add_library</span>(<span style="color:#f67400;">Foo::foo</span> <span style="color:#27ae60;">IMPORTED</span> <span style="color:#27ae60;">GLOBAL</span>) 0057 <span style="font-weight:bold;">set</span>(KW_HL IMPORTED GLOBAL) <span style="color:#7a7c7d;"># `IMPORTED` and `GLOBAL` are not highlighted here!</span> 0058 0059 <span style="color:#7a7c7d;"># Properties are separate ("special value") style</span> 0060 <span style="font-weight:bold;">set_target_properties</span>(<span style="color:#f67400;">Foo::foo</span> <span style="color:#27ae60;">PROPERTIES</span> <span style="color:#27ae60;">LOCATION</span> <span style="color:#f44f4f;">"</span><span style="color:#f67400;">${FOO_LIBRARY}</span><span style="color:#f44f4f;">"</span>) 0061 0062 <span style="color:#7a7c7d;"># Generator expressions</span> 0063 <span style="font-weight:bold;">target_compile_definitions</span>( 0064 <span style="color:#7a7c7d;"># </span><span style="color:#81ca2d;background-color:#4d1f24;font-weight:bold;">NOTE</span><span style="color:#7a7c7d;"> Ok w/ CMake >= 3.11</span> 0065 <span style="color:#f67400;">Foo::foo</span> 0066 <span style="color:#b86050;">$<$<</span><span style="color:#b84040;font-weight:bold;">PLATFORM_ID</span><span style="color:#b86050;">:Windows>:WINDOWS_FOO></span> 0067 <span style="color:#b86050;">$<$<</span><span style="color:#b84040;font-weight:bold;">PLATFORM_ID</span><span style="color:#b86050;">:Linux>:</span> 0068 <span style="color:#b86050;"> LINUX_FOO</span> 0069 <span style="color:#b86050;"> $<$<</span><span style="color:#b84040;font-weight:bold;">BOOL</span><span style="color:#b86050;">:</span><span style="color:#f67400;">${</span><span style="color:#27aeae;">_has_foo</span><span style="color:#f67400;">}</span><span style="color:#b86050;">>:SOME_FOO_PATH=</span><span style="color:#f67400;">${</span><span style="color:#c09050;">PROJECT_BINARY_DIR</span><span style="color:#f67400;">}</span><span style="color:#b86050;">/foo></span> 0070 <span style="color:#b86050;"> ></span> 0071 ) 0072 0073 <span style="color:#2980b9;background-color:#153042;">#[=======================================================================[.rst:</span> 0074 <span style="color:#2980b9;">.. cmake:command:: </span><span style="color:#7a7c7d;">my_fun</span> 0075 0076 <span style="font-style:italic;">*RST*</span><span style="color:#7a7c7d;"> documentation </span><span style="color:#2980b9;">``can``</span><span style="color:#7a7c7d;"> refer to </span><span style="font-weight:bold;">:cmake:command:</span><span style="color:#f67400;">`any_commands`</span><span style="color:#7a7c7d;"> or</span> 0077 <span style="font-weight:bold;">:cmake:variable:</span><span style="color:#f67400;">`variables`</span><span style="color:#7a7c7d;">...</span> 0078 0079 <span style="color:#2980b9;">.. code-block:: cmake</span> 0080 <span style="color:#2980b9;"> :caption: **Synopsys**</span> 0081 0082 <span style="color:#2980b9;"> my_fun([ANYTHING...])</span> 0083 0084 <span style="color:#2980b9;background-color:#153042;">#]=======================================================================]</span> 0085 <span style="font-weight:bold;">function</span>(my_fun) 0086 <span style="color:#7a7c7d;"># </span><span style="color:#ca9219;background-color:#451e1a;font-weight:bold;">TODO</span><span style="color:#7a7c7d;"> Add implementation</span> 0087 <span style="font-weight:bold;">endfunction</span>() 0088 0089 <span style="color:#8e44ad;">my_fun</span>( 0090 <span style="color:#7a7c7d;"># Custom functions do not highlight "standard" named args ...</span> 0091 PUBLIC LOCATION PARENT_SCOPE 0092 <span style="color:#7a7c7d;"># only some well-known values ...</span> 0093 <span style="color:#e05050;">smth-NOTFOUND</span> <span style="color:#30a030;">ON</span> 0094 <span style="color:#7a7c7d;"># and standard variables</span> 0095 <span style="color:#c09050;">PROJECT_VERSION</span> 0096 <span style="color:#7a7c7d;"># or substitutions</span> 0097 <span style="color:#f67400;">$ENV{HOME}</span> OR <span style="color:#f67400;">${</span><span style="color:#27aeae;">_internal_var_is_grey</span><span style="color:#f67400;">}</span> 0098 ) 0099 0100 <span style="color:#7a7c7d;"># I dont'recall exactly, but there was some bug with `if`...</span> 0101 <span style="color:#fdbc4b;font-weight:bold;">if</span>((A <span style="color:#27ae60;">AND</span> <span style="color:#f44f4f;">"</span><span style="color:#f67400;">${B}</span><span style="color:#f44f4f;">"</span>) <span style="color:#27ae60;">OR</span> C <span style="color:#27ae60;">OR</span> (var <span style="color:#27ae60;">MATCHES</span> <span style="color:#f44f4f;">"regex"</span>)) 0102 <span style="color:#7a7c7d;"># Anyway... it is Ok nowadays ;-)</span> 0103 0104 <span style="color:#fdbc4b;font-weight:bold;">elseif</span>(<span style="color:#27ae60;">POLICY</span> CMP066) 0105 <span style="font-weight:bold;">add_executable</span>(<span style="color:#f67400;">${</span><span style="color:#c09050;">PROJECT_NAME</span><span style="color:#f67400;">}</span> <span style="color:#f67400;">${</span><span style="color:#c09050;">PROJECT_NAME</span><span style="color:#f67400;">}</span><span style="color:#f67400;">.cc</span>) 0106 <span style="font-weight:bold;">target_link_libraries</span>( 0107 <span style="color:#f67400;">${</span><span style="color:#c09050;">PROJECT_NAME</span><span style="color:#f67400;">}</span> 0108 <span style="color:#f67400;">PRIVATE</span> 0109 <span style="color:#f67400;">Qt5::Core</span> 0110 <span style="color:#b86050;">$<$<</span><span style="color:#b84040;font-weight:bold;">BOOL</span><span style="color:#b86050;">:</span><span style="color:#f67400;">${HAS_FOO}</span><span style="color:#b86050;">>:</span><span style="color:#f67400;">Foo::foo</span><span style="color:#b86050;">></span> 0111 ) 0112 0113 <span style="color:#fdbc4b;font-weight:bold;">endif</span>() 0114 0115 <span style="color:#7a7c7d;"># In each function call below, all 3 named parameter lines should apply the same highlighting.</span> 0116 <span style="font-weight:bold;">add_custom_command</span>( 0117 <span style="color:#27ae60;">COMMAND</span> <span style="color:#30a030;">true</span> 0118 <span style="color:#27ae60;">COMMAND</span> (<span style="color:#30a030;">true</span>) 0119 <span style="color:#27ae60;">COMMAND</span> <span style="color:#30a030;">true</span> 0120 ) 0121 <span style="font-weight:bold;">add_custom_target</span>(<span style="color:#f67400;">TargetName</span> 0122 <span style="color:#27ae60;">WORKING_DIRECTORY</span> somedir 0123 <span style="color:#27ae60;">COMMAND</span> (<span style="color:#30a030;">true</span>) 0124 <span style="color:#27ae60;">BYPRODUCTS</span> somefile 0125 ) 0126 <span style="font-weight:bold;">execute_process</span>( 0127 <span style="color:#27ae60;">COMMAND</span> <span style="color:#30a030;">true</span> 0128 <span style="color:#27ae60;">COMMAND</span> (<span style="color:#30a030;">true</span>) 0129 <span style="color:#27ae60;">COMMAND</span> <span style="color:#30a030;">true</span> 0130 ) 0131 <span style="font-weight:bold;">add_test</span>( 0132 <span style="color:#27ae60;">NAME</span> sometest 0133 <span style="color:#27ae60;">COMMAND</span> (<span style="color:#30a030;">true</span>) 0134 <span style="color:#27ae60;">WORKING_DIRECTORY</span> somedir 0135 ) 0136 0137 <span style="color:#7a7c7d;"># nested parentheses</span> 0138 <span style="color:#fdbc4b;font-weight:bold;">if</span>( <span style="color:#30a030;">true</span> <span style="color:#27ae60;">AND</span> ( <span style="color:#e05050;">false</span> <span style="color:#27ae60;">OR</span> (<span style="color:#f44f4f;">"</span><span style="color:#f67400;">${</span><span style="color:#c09050;">CMAKE_CXX_COMPILER_ID</span><span style="color:#f67400;">}</span><span style="color:#f44f4f;">"</span> <span style="color:#27ae60;">STREQUAL</span> <span style="color:#f44f4f;">"Clang"</span>) ) ) 0139 <span style="color:#fdbc4b;font-weight:bold;">endif</span>() 0140 </pre></body></html>