Hi,
I just want to confirm that I have the same problem on Windows with the
Ninja generator. Even when I always use both keywords (debug & optimized)
in my *target_link_libraries *commands I still got a *ninja.build *file
that has bad $-escape characters.
I think that this problem is happening only when I tried to compile a
library twice (shared and static) and I tried to propagate the
*LINK_LIBRARIES* property from the shared library to the static one:
add_library(mylib SHARED ${mylib_all_sources})
add_library(mylib_static STATIC EXCLUDE_FROM_ALL ${mylib
_all_sources})
target_link_libraries(mylib PUBLIC ${SOME_LIBS})
target_link_libraries(mylib_static PUBLIC
$<TARGET_PROPERTY:mylib,LINK_LIBRARIES>)
Only in that situation is when I got the weird bad $-escape characters on
the ninja.build file. This is an example of the line with these problems:
LINK_LIBRARIES = C:\myProject\buildRelease\bin64\library1.lib
C:\myProject\buildRelease\bin64\library2.lib
C:\myProject\libs\gmock.lib
C:\myProject\libs\CGAL-vc120-mt-4.4.lib
C:\myProject\libs\exiv2.lib
C:\myProject\libs\ceres.lib
... // removing some lines
$<$<NOT:$>:C:/myProject\libs/CGAL-vc120-mt-4.4.lib>
$<$:C:/myProject\libs/CGAL-vc120-mt-gd-4.4.lib>
... // removing some lines
$<$<NOT:$>:C:/myProject\libs/exiv2.lib>
$<$:C:/myProject\libs/exiv2d.lib>
$<$<NOT:$>:C:/myProject\libs/ceres.lib>
$<$:C:/myProject\libs/ceres-debug.lib>
...
kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib
oleaut32.lib uuid.lib comdlg32.lib advapi32.lib
I will try to create a minimum example to reproduce this issue.
Cheers,
Luis
2016-10-05 16:39 GMT+02:00 Luis Díaz Más <pipon...@gmail.com>:
> Hi all,
>
> I have found a problem while configuring a project and I want to share the
> experience with you to figure out whether it is a known problem or a bug in
> CMake.
>
> In some cases I use the cmake command *target_link_libraries *specifying
> different libraries for the *debug* and *optimized* modes. This normally
> work as expected. However recently we got a problem with the Ninja
> generator. This is what I could see in the console when I try to compile
> the project:
>
> ninja: error: build.ninja:4956: bad $-escape (literal $ must be written as
> $$)
>
>
> The content of the file in that particular line has something like this:
>
> $<$:/home/luis///lib/libCGAL.so>
>
> Examining my cmake configuration I noticed that a colleague introduced
> something like that in the *target_link_libraries* call:
>
> ${ZLIB_LIBRARIES}
> debug;${CGAL_LIB}
> ${GMP_LIB}
>
> If we specify the debug & optimized modes we do not have problems. However
> in this particular case, it seems that we only need to link against the
> CGAL in debug mode and not in release mode. Note that with a Make generator
> we can compile normally the project.
>
> The work around for this case is to link normally against CGAL when we are
> in Debug mode:
>
> if (${CMAKE_BUILD_TYPE} STREQUAL Debug)
> target_link_libraries(myTarget ${CGAL_LIB}
> endif()
>
> So ... the questions are:
>
>
>- Is it possible to use *target_link_libraries *only with one of the
>modes (debug / optimized) ?
>- The Make generator works properly for this case. Could it be a bug
>with the Ninja generator? I tried with the most recent versions of CMake &
>Ninja.
>
> Best regards,
> Luis Diaz Mas
>
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake