<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 30.07.2014 17:41, Fabien Spindler
      wrote:<br>
    </div>
    <blockquote cite="mid:53D91247.8010809@inria.fr" type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=windows-1252">
      <div class="moz-text-html" lang="x-western"> Hi,<br>
        <br>
        I'm not able to find a good way to modify my cmake files to
        consider CMP0026 policy introduced in cmake 3.0.0.<br>
        <br>
        I have a project that create a library libfoo and
        FooConfig.cmake file that allows to use my library as a 3rd
        party.<br>
        In FooConfig.cmake updated during configuration time, I need to
        set FOO_LIBRARIES with the full path and name of the library in
        debug and release. To get the library names, I use the target
        location property. Since cmake 3.0.0 this seems a bad idea.<br>
        <br>
        CMake Warning (dev) at CMakeLists.txt:8 (get_target_property):<br>
          Policy CMP0026 is not set: Disallow use of the LOCATION target
        property.<br>
        CMake Warning (dev) at CMakeLists.txt:9 (get_target_property):<br>
          Policy CMP0026 is not set: Disallow use of the LOCATION target
        property.<br>
        <br>
        Here is a small example that reproduces the behavior. <br>
        <br>
        -- Begin CMakeLists.txt --<br>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">project</span>(test)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">cmake_minimum_required</span>(VERSION<span style=" color:#c0c0c0;"> </span>2.6)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">add_library</span>(foo<span style=" color:#c0c0c0;"> </span>foo.cpp)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">get_target_property</span>(FOO_LIBNAME_DBG<span style=" color:#c0c0c0;"> </span>foo<span style=" color:#c0c0c0;"> </span>LOCATION_Debug)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">get_target_property</span>(FOO_LIBNAME_OPT<span style=" color:#c0c0c0;"> </span>foo<span style=" color:#c0c0c0;"> </span>LOCATION_Release)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">get_filename_component</span>(FOO_LIBNAME_DBG<span style=" color:#c0c0c0;"> </span><span style=" color:#008000;">"</span><span style=" color:#800000;">${FOO_LIBNAME_DBG}</span><span style=" color:#008000;">"</span><span style=" color:#c0c0c0;"> </span>NAME)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">get_filename_component</span>(FOO_LIBNAME_OPT<span style=" color:#c0c0c0;"> </span><span style=" color:#008000;">"</span><span style=" color:#800000;">${FOO_LIBNAME_OPT}</span><span style=" color:#008000;">"</span><span style=" color:#c0c0c0;"> </span>NAME)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;">configure_file</span>(FooConfig.cmake.in<span style=" color:#c0c0c0;"> </span>FooConfig.cmake)</pre>
        -- End CMakeLists.txt --<br>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#808000;"></span></pre>
        <br>
        -- Begin FooConfig.cmake.in --<br>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">set(FOO_SOURCE_DIR<span style=" color:#c0c0c0;"> </span>@CMAKE_SOURCE_DIR@)</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">set(FOO_LIBNAME_DBG<span style=" color:#c0c0c0;"> </span>"@FOO_LIBNAME_DBG@")</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">set(FOO_LIBNAME_OPT<span style=" color:#c0c0c0;"> </span>"@FOO_LIBNAME_OPT@")</pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">set(FOO_LIBRARIES<span style=" color:#c0c0c0;"> </span>debug<span style=" color:#c0c0c0;"> </span>@CMAKE_INSTALL_PREFIX@/lib/${FOO_LIBNAME_DBG}<span style=" color:#c0c0c0;"> </span>optimized<span style=" color:#c0c0c0;"> </span>@CMAKE_INSTALL_PREFIX@/lib/${FOO_LIBNAME_OPT})</pre>
        -- End FooConfig.cmake.in --<br>
        <br>
        Adding the following lines in my CMakeLists.txt seems not the
        best way to ensure compat with future versions of CMake.
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#008000;">
if(POLICY</span><span style=" color:#c0c0c0;"> </span><span style=" color:#008000;">CMP0026)</span></pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#008000;"></span><span style=" color:#c0c0c0;">  </span><span style=" color:#008000;">cmake_policy(SET</span><span style=" color:#c0c0c0;"> </span><span style=" color:#008000;">CMP0026</span><span style=" color:#c0c0c0;"> </span><span style=" color:#008000;">OLD)</span></pre>
        <pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#008000;">endif()
</span></pre>
        <br>
        I tried also to play with add_custom_command() using <br>
        <pre>$<TARGET_PROPERTY:foo,LOCATION_Debug></pre>
        But I cand find any command that set a variable<br>
        <br>
        Any idea ?<br>
        <br>
        Thanks<br>
        Fabien<br>
      </div>
    </blockquote>
    <br>
    You could use file(GENERATE) [1] with the TARGET_FILE (_NAME, _DIR)
    [2] generator expressions (one file per configuration).<br>
    <br>
    Or use export() [3] to export your targets for use in your build
    directory package configuration file.<br>
    You could then add those targets to FOO_LIBRARIES instead of the
    full paths.<br>
    <br>
    [1] <a class="moz-txt-link-freetext" href="http://www.cmake.org/cmake/help/v3.0/command/file.html">http://www.cmake.org/cmake/help/v3.0/command/file.html</a><br>
    [2]
<a class="moz-txt-link-freetext" href="http://www.cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html#informational-expressions">http://www.cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html#informational-expressions</a><br>
    [3] <a class="moz-txt-link-freetext" href="http://www.cmake.org/cmake/help/v3.0/command/export.html">http://www.cmake.org/cmake/help/v3.0/command/export.html</a><br>
  </body>
</html>