[cmake-developers] Interface includes and defines plumbing

Stephen Kelly steveire at gmail.com
Mon Jan 7 18:54:41 EST 2013


Brad King wrote:

> On 01/07/2013 03:36 PM, Stephen Kelly wrote:
>> Perhaps it should be
>> 
>>  install(TARGETS testLibRequired
>>          EXPORT RequiredExp DESTINATION lib
>>          INTERFACE_INCLUDES
>>            "/foo/bar"
>>  )
>> 
>> ?
> 
> That looks better, but I think it is best to wait until we gain more
> experience with the new capabilities.  We can always add convenience
> interfaces later but we can't take them away.

Yes.

> 
>>> wonder if we should hold off on this convenience interface until more
>>> of the new usage interface magic is worked out.  We may be able to
>>> find an even more convenient way to set a whole bunch of stuff on
>>> an installed target's interface.
>> 
>> Ok. I can split CMAKE_BUILD_INTERFACE_INCLUDES into a topic of its own.
> 
> Yes.

I've merged it to next as include-dirs-convenience.

> 
>> Yes, I can modify it to that effect. I was also thinking that for the
>> includes command it might make sense to have a BEFORE keyword, but I'm
>> not certain.
> 
> I'm sure it won't take long for someone to ask for it if it isn't there.
> It essentially asks for the arguments to be prefixed instead of appended
> on the property value.

Yes, added now.

> 
>> I also have a slight concern that
>> 
>>  target_compile_definitions(foo PRIVATE bar)
>> 
>> has an ambiguous meaning.
>> 
>> What do you think?

> Fortunately target names are usually
> lower case and macros are usually upper case so this conflict will
> be rare in practice.

Yes, I agree. That's why I think the set_property workaround should be fine 
too.

> The new commands do not need to be included in the bootstrap build.
> We won't be using them in CMake's own rules for a while.

I've merged the branch to next for testing. It's not clear how to add the 
commands without bootstrapping them. 

In my branch, the BootstrapTest fails:


cmake.o: In function 
`cmTargetIncludeDirectoriesCommand::cmTargetIncludeDirectoriesCommand()':
cmake.cxx:
(.text._ZN33cmTargetIncludeDirectoriesCommandC2Ev[_ZN33cmTargetIncludeDirectoriesCommandC5Ev]+0x1f): 
undefined reference to `vtable for cmTargetIncludeDirectoriesCommand'
cmake.o: In function 
`cmTargetCompileDefinitionsCommand::cmTargetCompileDefinitionsCommand()':
cmake.cxx:
(.text._ZN33cmTargetCompileDefinitionsCommandC2Ev[_ZN33cmTargetCompileDefinitionsCommandC5Ev]+0x1f): 
undefined reference to `vtable for cmTargetCompileDefinitionsCommand'


I'm sure the reason is that cmake.cxx itself is bootstrapped.

Thanks,

Steve.





More information about the cmake-developers mailing list