Re: [CMake] how to link a test with library in build directory, not with installed version?

2019-05-28 Thread Aaron Cohen
On Tue, May 28, 2019 at 1:24 PM Aaron Cohen  wrote:

> b) Arrange that AConfig.cmake is installed to
> /usr/lib/cmake/A/AConfig.cmake, which also exports an A::A target. This is
> the "installed" version of the library, for consumers.
>

I was originally writing a longer answer and forgot to remove this part.
You don't actually need to create/install this file if you are just
concerned with testing within your project. (It's good to do in general,
it's just un-related to your question).
-- 

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:
https://cmake.org/mailman/listinfo/cmake


Re: [CMake] how to link a test with library in build directory, not with installed version?

2019-05-28 Thread Aaron Cohen
For "modern cmake", you should:

1) When building libA:
a) Create an alias to your library (add_library A::A ALIAS A). This will
ensure that users are explicitly linking against a _target_ and not a file
named "libA" which just happens to match the name of the target you are
attempting to use.
b) Arrange that AConfig.cmake is installed to
/usr/lib/cmake/A/AConfig.cmake, which also exports an A::A target. This is
the "installed" version of the library, for consumers.

2) In your test CmakeLists, link against A::A rather than just A.

I believe that will work the way you want.

--Aaron

On Mon, May 27, 2019 at 11:58 AM Joachim Wuttke 
wrote:

> How to link a test with a library as obtained in the build directory,
> not with the installed version, which may be outdated?
>
> Disclosure: cross-posted from https://stackoverflow.com/questions/56328326
> .
>
> == Use case ==
>
> Suppose
>
>cmake; make; ctest; make install
>
> works fine:
> - generates libA,
> - runs testB,
> - installs libA to ${CMAKE_INSTALL_LIBDIR}.
>
> Now I modify libA, and rerun
>make; ctest.
> No reaction to my modifications:
>ldd testB
> shows that the installed version of libA is used.
> Which is plain nonsense for a test.
>
> The test should always use the local version of libA, never the installed
> one.
>
> == Towards a solution ==
>
> I saw a lot of advise that involves RPATH, but found no variant that helps.
>
> So I hard-coded the path by changing
>target_link_libraries(testB PRIVATE A)
> into
>target_link_libraries(testB PRIVATE ${CMAKE_BINARY_DIR}/lib/libA.so).
>
> This works, but is no longer platform independent.
> How to solve my problem in a way that also works under Windows?
>
> - Joachim
>
> --
>
> 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:
> https://cmake.org/mailman/listinfo/cmake
>
-- 

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:
https://cmake.org/mailman/listinfo/cmake


[CMake] how to link a test with library in build directory, not with installed version?

2019-05-27 Thread Joachim Wuttke

How to link a test with a library as obtained in the build directory,
not with the installed version, which may be outdated?

Disclosure: cross-posted from https://stackoverflow.com/questions/56328326.

== Use case ==

Suppose

  cmake; make; ctest; make install

works fine:
- generates libA,
- runs testB,
- installs libA to ${CMAKE_INSTALL_LIBDIR}.

Now I modify libA, and rerun
  make; ctest.
No reaction to my modifications:
  ldd testB
shows that the installed version of libA is used.
Which is plain nonsense for a test.

The test should always use the local version of libA, never the installed one.

== Towards a solution ==

I saw a lot of advise that involves RPATH, but found no variant that helps.

So I hard-coded the path by changing
  target_link_libraries(testB PRIVATE A)
into
  target_link_libraries(testB PRIVATE ${CMAKE_BINARY_DIR}/lib/libA.so).

This works, but is no longer platform independent.
How to solve my problem in a way that also works under Windows?

- Joachim



smime.p7s
Description: S/MIME Cryptographic Signature
-- 

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:
https://cmake.org/mailman/listinfo/cmake