<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Titel" content="">
<meta name="Stichwörter" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.E-Mail-Formatvorlage17
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.msoIns
{mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
color:teal;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:595.0pt 842.0pt;
margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="DE" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">this solved the issue here as well.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">I added a pull request for a documentation update according to the MAIN_DEPENDENCY:
<a href="https://gitlab.kitware.com/cmake/cmake/merge_requests/1665">https://gitlab.kitware.com/cmake/cmake/merge_requests/1665</a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Regards<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Christoph<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US">rüdiger.engineering<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US">Christoph Rüdiger<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US">Düsseldorfer Str. 12<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US">45145 Essen<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US">Germany<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span lang="EN-US" style="color:black;mso-fareast-language:EN-US">phone: +49
</span><span style="color:black;mso-fareast-language:EN-US">201 458 478 58</span><span style="mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-left:35.4pt"><b><span style="font-size:12.0pt;color:black">Von:
</span></b><span style="font-size:12.0pt;color:black">Hendrik Sattler <post@hendrik-sattler.de><br>
<b>Datum: </b>Montag, 15. Januar 2018 um 14:47<br>
<b>An: </b>"cmake@cmake.org" <cmake@cmake.org>, "christoph@ruediger.engineering" <christoph@ruediger.engineering>, "cmake@cmake.org" <cmake@cmake.org><br>
<b>Betreff: </b>Re: [CMake] Dual use for single source file<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Hi,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">I also fell into this trap before:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Don't use MAIN_DEPENDENCY but DEPENDS.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">HS<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Am 15. Januar 2018 12:19:37 MEZ schrieb "<a href="mailto:christoph@ruediger.engineering">christoph@ruediger.engineering</a>" <<a href="mailto:christoph@ruediger.engineering">christoph@ruediger.engineering</a>>:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #B5C4DF 4.5pt;padding:0cm 0cm 0cm 4.0pt;margin-left:3.75pt;margin-right:0cm" id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE">
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Hi folks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">we’re using a clang-based tool for co-processing a bunch of our source<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">files. The benefit is, that it understands the compile_commands.json<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">database and hence we do not need to pull out the include paths and the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">compile definitions by hand. However, CMake does not compile the source<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">file any longer when used as input to a custom command.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Here is the simplest project I could come up with to demonstrate the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">behavior:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--- snip ---<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"># CMakeLists.txt<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">cmake_minimum_required(VERSION 3.1)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">project(hello-world)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">add_executable(hello main.cxx hello.cxx)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/reflections.h<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">COMMAND echo "// This is a tool which creates type reflections"<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #B5C4DF 4.5pt;padding:0cm 0cm 0cm 4.0pt;margin-left:3.75pt;margin-right:0cm" id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE">
<div>
<p class="MsoNormal" style="margin-left:35.4pt">reflections.h<o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"> MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/hello.cxx<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"> COMMENT "Generating reflections"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--- snip ---<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--- snip ---<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">// main.cxx<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">void print_hello();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">int main() {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"> print_hello();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"> return 0;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--- snip ---<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--- snip ---<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">// hello.cxx<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">#include <iostream><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">void print_hello() {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"> std::cout << "Hello world!\n";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--- snip ---<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">What happens is, that CMake does not compile hello.cxx any longer. It<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">only executes the custom command. Consequently, the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">compile_commands.json database does not contain any information about<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">hello.cxx. Tested on cmake 3.9.1 and 3.10.1.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">The reason for this behavior seems to be, that there can be only one<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">kind for each given source file. In<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">cmGeneratorTarget::ComputeKindedSources, there is an explicit check for<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">not adding a source file multiple times to the KindedSources vector.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">And when checking which kind a source file is of, the first check is<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">for custom commands. CMake says “Bingo, this is a custom command” and<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">does not check whether it can be of any other kind as well.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Is this a keep-it-simple implementation or is there any deeper<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">knowledge behind this behavior?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">And more important: how can I force CMake to compile a source file and<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">process it by a custom command?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Thanks for your help,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Christoph<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">--<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">rüdiger.engineering<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Christoph Rüdiger<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Düsseldorfer Str. 12<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">45145 Essen<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Germany<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">phone: +49 201 458 478 58<o:p></o:p></p>
</div>
</blockquote>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">-- <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt">Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:35.4pt"><o:p> </o:p></p>
</div>
</div>
</body>
</html>