[cmake-developers] INTERFACE_LINK_LIBRARIES property?

Stephen Kelly steveire at gmail.com
Fri Jun 28 06:02:47 EDT 2013


Brad King wrote:

> Okay, I think we've had some confusion due to differing assumptions
> about the meaning of "old" and "new" tll signatures.  Let me be more
> explicit.  For the signature policy, there are two groups of signatures:
> 
> * Group A (what I called "old" signatures):
> 
>   target_link_libraries(lhs a b c)
>   target_link_libraries(lhs LINK_INTERFACE_LIBRARIES a b c)
> 
> * Group B (what I called "new" signatures):
> 
>   target_link_libraries(lhs LINK_PUBLIC a LINK_PRIVATE b LINK_INTERFACE c)
>   target_link_libraries(lhs PUBLIC a PRIVATE b INTERFACE c)

Is it really worthwhile to introduce both INTERFACE and LINK_INTERFACE?

> The semantics of the two group B signatures are *identical*.  There
> is absolutely ZERO distinction between PUBLIC and LINK_PUBLIC.

Ok. So, 

* LINK_PUBLIC is treated as an alias for PUBLIC 
* LINK_PRIVATE is treated as an alias for PRIVATE
* LINK_INTERFACE_LIBRARIES is *not* treated as an ALIAS for INTERFACE

Correct?

> I expected to see things like
> 
> - else if(args[i] == "LINK_PUBLIC")
> + else if(args[i] == "PUBLIC" || args[i] == "LINK_PUBLIC")

That would mean mixtures like this would be allowed:

 target_link_libraries(lhs LINK_PUBLIC a PRIVATE b)

Should they be?

> Now, the signature policy should have the following behavior:
> 
> * OLD: Group A *and* group B can be used for one lhs
> * NEW: Group A *xor* group B can be used for one lhs

Right.

Thanks,

Steve.





More information about the cmake-developers mailing list