Hi Joshua,

2018-03-15 4:18 GMT+01:00 Joshua Baergen <[email protected]>:

> Hello,
>
> I'm attempting to implement link-time dependency injection. In brief, what
> this means is that, for a library A that depends on B, we would normally
> have:
>
>   target_link_libraries(A B)
>
> However, when building unittests for A (done in a subdirectory), we
> instead want:
>
>   target_link_libraries(A MockB)
>
> I've spent a bunch of time looking through CMake documentation and I'm not
> sure how to express this without resorting to manually specifying the link
> line when A is in use. Could someone give me some guidance?
>


Since you want link-time choice I bet you should have a look to some kind
of generator expression
see doc here:
https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html

genex may be used in target_link_libraries.

for example if you can set some property on (all) your unit test target
(I personnally do that globally by defining my own mytest_add_executable
macro)

set_target_properties(<YourTestTarget> PROPERTIES UNITTEST 1)

then may be you can use some genex which check whether an executable if a
unitest:

set(GenEx_IsTest $<STREQUAL:$<TARGET_PROPERTY:UNITTEST>,1>)

and then use some other genex using the previous one in
target_link_libraries

like here for automatic instantiation of source:
https://cmake.org/pipermail/cmake/2015-January/059669.html

I lack time to craft the complete example but I think it's doable with
genex.

It seems that others already played along this line:
https://developer.blender.org/T46725

-- 
Eric
-- 

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

Reply via email to