[CMake] Link-Time Dependency Injection for Unit Tests

Joshua Baergen joshuabaergen at gmail.com
Thu Mar 15 09:52:00 EDT 2018


Thanks Eric! That worked perfectly.

I had looked at generator expressions yesterday, but didn't understand at
which point during makefile generation they were evaluated, and had falsely
assumed that they were evaluated too early. Happy to learn new tricks! :)

Josh

On Thu, Mar 15, 2018 at 2:56 AM Eric Noulard <eric.noulard at gmail.com> wrote:

> Hi Joshua,
>
>
> 2018-03-15 4:18 GMT+01:00 Joshua Baergen <joshuabaergen at gmail.com>:
>
>> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180315/544150ba/attachment.html>


More information about the CMake mailing list