<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:x="urn:schemas-microsoft-com:office:excel" 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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
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;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi<o:p></o:p></p><p class=MsoNormal><a name="_MailEndCompose"><o:p> </o:p></a></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>I haven’t had any replies to my message below, hopefully because it was sent at the wrong time of year… So I’m reposting, but with some  clarifications.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>I wrote the message about include_flags only. I’ve currently solved this by adding a variable <o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>               Set(STIR_INCLUDE_DIRS blabla)<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>in my STIRConfig.cmake.in (which is at </span><a href="https://github.com/UCL/UCL-STIR/blob/master/src/cmake/STIRConfig.cmake.in"><span style='mso-bookmark:_MailEndCompose'>https://github.com/UCL/UCL-STIR/blob/master/src/cmake/STIRConfig.cmake.in</span><span style='mso-bookmark:_MailEndCompose'></span></a><span style='mso-bookmark:_MailEndCompose'>)<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>and tell the user of the library that they have to do<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal style='text-indent:36.0pt'><span style='mso-bookmark:_MailEndCompose'>include_directories(${STIR_INCLUDE_DIRS})<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>This works but only for include directories, not for other compiler flags. I’ve currently solved that by putting all (most?) of these in a STIRConfig.h.in.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>I don’t particularly like the include_directories solution however. I believe CMake’s eport facility is trying to get away from this. Indeed, for the library, its include path (and other compilation flags) get automatically exported, so the user doesn’t have to do anything else than target_link_libraries to inherit all necessary flags.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>Also, my current solution relies on exporting the .cxx. It seems safer to export the object file as that is guaranteed to have been compiled with the correct flags, but I don’t know how to do that.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>I hope my message below makes more sense now.<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>Thanks<o:p></o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-bookmark:_MailEndCompose'>Kris</span><span style='mso-bookmark:_MailEndCompose'><o:p></o:p></span></p><span style='mso-bookmark:_MailEndCompose'></span><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='mso-fareast-language:EN-GB'>From:</span></b><span lang=EN-US style='mso-fareast-language:EN-GB'> Kris Thielemans<br><b>Sent:</b> 27 December 2016 16:12<br><b>To:</b> cmake@cmake.org<br><b>Subject:</b> installing source (or object) files<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hi all<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I have a non-standard set-up where I have a library that needs to be linked together with some extra source files that contain “registries”). So in my CMakeLists.txt I use<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Add_executable(wonderful_program wonderful_program.cxx registry.cxx)<o:p></o:p></p><p class=MsoNormal>target_link_libraries(wonderful_program mylib)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>registry.cxx needs to be compiled with some of my include files.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>For that, I added<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>include_directories(“${PROJECT_SOURCE_DIR}/src/include”)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I guess I could just as well have added<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>SET_PROPERTY(SOURCE registry.cxx PROPERTY COMPILE_FLAG "-I${STIR_INCLUDE_DIR}")<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This works fine, but now I want to export my library (relocatable). I have created a config file etc, added mylib as an install target, installed the include files etc. All of that works great for the library. However, I have no idea how to install registry.cxx. I could just <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>INSTALL(FILES registry.cxx …)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>However, that doesn’t copy the properties of the source files anywhere. In particular, it means that a “client” doesn’t know what compilation flags to use.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Any ideas?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Best wishes for 2017!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Kris<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>PS: The reason that I need registry.cxx is that it contains some variables that have a funky constructor that initialises some registries somewhere.<o:p></o:p></p><p class=MsoNormal>PS: Full source code is at <a href="https://github.com/UCL/STIR">https://github.com/UCL/STIR</a><o:p></o:p></p></div></body></html>