[CMake] Restrictions on where a binary can be put?

Michael Hertling mhertling at online.de
Sun Jan 9 16:26:32 EST 2011


On 01/09/2011 09:47 PM, Nizar Khalifa Sallem wrote:
> At Sun, 09 Jan 2011 21:42:49 +0100,
> Michael Hertling wrote:
>>
>> On 01/09/2011 09:09 PM, Andreas Pakulat wrote:
>>> On 09.01.11 21:05:21, Andreas Pakulat wrote:
>>>> On 09.01.11 14:24:16, Michael Hertling wrote:
>>>>> On 01/09/2011 12:58 PM, Andreas Pakulat wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I'm having a bit of a problem here changing the runtime output directory
>>>>>> for a binary. Its an executable target named 'setup' and I'd like to put it
>>>>>> into the top-level directory. Unfortunately it always ends up in the bin/
>>>>>> directory, which is what CMAKE_RUNTIME_OUTPUT_DIRECTORY is being set to.
>>>>>>
>>>>>> I'm using
>>>>>>     set_target_properties( setup PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
>>>>>> after creating the target currently, which should work as far as I can see
>>>>>> from the documentation. Are there maybe any restrictions on what the
>>>>>> directory may be or what targets can be put there?
>>>>>>
>>>>>> If not, any suggestions how to debug this? I can see that the build.make
>>>>>> does already have the rule setup for putting the binary into bin/, so it
>>>>>> must be going wrong somewhere in the generation stage, but a simple cmake
>>>>>> --trace doesn't show up anything suspicious. Is there a switch to follow
>>>>>> the steps that cmake does during makefile-generation?
>>>>>
>>>>> Could you provide a minimal but complete example?
>>>>
>>>> Ok, attached case produces the error. Apparently the problem is fetching
>>>> the LOCATION property from the target and setting the
>>>> RUNTIME_OUTPUT_DIRECTORY afterwards. Looks like a cmake bug to me, so
>>>> I'll file a report.
>>>
>>> Ooops, forgot the attachment :)
>>
>> Now, I can confirm the issue; indeed, the GET_TARGET_PROPERTY() on the
>> LOCATION apparently renders the following SET_TARGET_PROPERTY() on the
>> RUNTIME_OUTPUT_DIRECTORY ineffective. As I cannot see any reason for
>> this, I'd agree that it should be considered as a bug. Besides, my
>> example was pointless: A simple clash of an executable "main" with
>> a subdirectory of the same name in CMAKE_BINARY_DIR, sorry. :/
>>
>> Regards,
>>
>> Michael

> I don't really understand why you want to get the LOCATION from your
> target, anyway, the get_target_property works fine if you use
> set_target_properties before it. [...]

...but SET_TARGET_PROPERTIES() doesn't work fine if it's used after
GET_TARGET_PROPERTY(), even if both operate on different properties.

> [...] I am not sure that the
> CMAKE_RUNTIME_OUTPUT_DIRECTORY makes a property which is
> "gettable". [...]

Why should any property be not gettable? Some are not settable, like
the LOCATION, but that's not the point. The point is that getting a
property, i.e. a read operation, should not have an impact on any
subsequent command which does not use the former's results.

> [...] If you can better explain what do you want to do with the
> LOCATION of your target may be someone can help.

Regards,

Michael

@ Martin O'Brien: On my side, everything works as usual.


More information about the CMake mailing list