<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii">
<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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:Consolas;
        color:darkgreen;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">Howdy,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">I’m running into an issue with a custom target dependency that I want to assign to all source files. In this case, I have a helper library (lets call it utils) that builds a couple source
 files that each depend on an output file from a separate process. It would look something like this:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">System/libs/utils/CMakeLists.txt:<o:p></o:p></span></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="409" valign="top" style="width:307.05pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Show CMake how to build the file we need<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">add_custom_command(<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  OUTPUT<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">    out.txt<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  DEPENDS<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">    C:/in.txt<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  COMMAND<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">    <makeOutputFileFromInputFile><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Create a target that requires the output file<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">add_custom_target(customTarget DEPENDS out.txt<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Create a list of source files<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">set (SOURCE_FILES<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  utils.cpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  helpers.cpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Make all source files depend on the new target<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">set_source_files_properties(<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  ${SOURCE_FILES}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  OBJECT_DEPENDS<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">    customTarget<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Assign source files to utils library, etc.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><…><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">When CMake runs, two folders are created (in the folder bin/obj/system/libs/utils/CMakeFiles). They are called utils.dir and customTarget.dir. In utils.dir, we find our build.make file
 and see the rules to produce the compiled object as well as the custom target:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">bin/obj/system/libs/utils/CMakeFiles/build.make:<o:p></o:p></span></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="522" valign="top" style="width:391.8pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Miscellaneous assignments at the top<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><…><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Rule to make custom target<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">system/libs/utils/CMakeFiles/customTarget: out.txt<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">out.txt: C:/in.txt<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  <makeOutputFileFromInputFile><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Rules to make the files<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">system/libs/utils/CMakeFiles/utils.dir/utils.o: customTarget<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  <compilerToBuildObject><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">system/libs/utils/CMakeFiles/utils.dir/helpers.o: customTarget<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">  <compilerToBuildObject><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"># Other rules, assignments, etc.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><…><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">The problem seems to be how the custom target is defined. For the object files, its simply the target name. The target itself appears to have a fully qualified path. This is giving me the
 following error:<o:p></o:p></span></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="998" valign="top" style="width:10.4in;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">gmake[2]: *** No rule to make target `customTarget, needed by ` system/libs/utils/CMakeFiles/utils.dir/helpers.o'.  Stop.<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">If I manually edit the make file and change the target to the fully qualified name (and manually execute make) then the compilation succeeds. Is there something that I am doing wrong that
 is incorrectly assigning the target name? Is there an alternative to the “set_source_files_properties” command that would behave better?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:darkgreen">Thank you in advance for your help!<o:p></o:p></span></p>
</div>
</body>
</html>