[CMake] RC compiler on Linux - new problem - solved

pellegrini pellegrini at ill.fr
Mon Oct 24 05:08:57 EDT 2011


thanks a lot Michael.

Finally, this was not such a trivial problem but I should find my way 
with the examples you gave me.

Eric

Michael Hertling a écrit :
> On 10/21/2011 06:49 PM, pellegrini wrote:
>   
>> Hi all,
>>
>> after digging and googling some hours I did a first step in the right 
>> direction.
>>
>> I had to add the command:
>>
>> enable_language(rc)
>> set(cmake_rc_compiler_arg1 -cif8)
>>
>> The resource compiler I (must) use is the one provided by winteracter 
>> Fortran library.
>>
>> This led me to a serie of problems related to the use of this compiler:
>>     - it does not accept any output flag so that the output resource 
>> object is always created "in-source" in the rc file directory.
>>     - on Linux, it produces a .o object file instead of a .res file
>>
>> Looking at the CMakeRCInformation.cmake I see that by construction CMake 
>> will use the following compile command:
>> "<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> /fo<OBJECT> <SOURCE>"
>> with a resource object file with a .res extension.
>>     
>
> You might rewrite this rule variable, e.g. in order to drop
> /fo<OBJECT>, but this wouldn't resolve your issues, AFAICS.
>
>   
>> On a Linux machine, this produces a wrong build command line with the 
>> path for the output object file being "/foCMakeFiles/...". This problem 
>> was raised sometime ago in the mantis bug tracker but unfortunatley the 
>> patch proposed apply for mingw using windres but not for Linux.
>>
>> Is there a fix for this ?
>>
>> If no, is there a way to inform the linker that:
>>     - my resource object file is located "in-source"
>>     
>
> You might create symlinks to the resource files - or copy them - so
> that the winteracter RC generates its output files within the build
> tree; note that the source tree may be read-only. This could even be
> done on the fly with an adapted version of ADD_EXECUTABLE/LIBRARY().
>
>   
>>     - the extension is not .res but .o
>>     
>
> You might use a RULE_LAUNCH_COMPILE property in conjunction with a
> shell script which recognizes RC command lines, moves the .o to a
> .res in the correct directory and drops the undesired /fo switch.
>
> The attached CMakeLists.txt and rc.sh files outline these approaches;
> check them out with meaningful ${CMAKE_SOURCE_DIR}/{abs,srcdir}.rc
> and ${CMAKE_BINARY_DIR}/bindir.rc. However, they are untested as I
> currently haven't any RC at hand; moreover, they're restricted to
> Makefiles and won't work on Windows.
>
> Regards,
>
> Michael
>
>   
>> pellegrini a écrit :
>>     
>>> Hi all,
>>>
>>> I use CMake 2.8.5 on Linux and Windows machine to build a Fortran 
>>> project.
>>>
>>> On Windows, no problem, the build and the resulting GUI are OK. On 
>>> Linux, the build seems to
>>> be OK but the resulting GUI gives an empty screen. Discussing with 
>>> Michael a few days ago made
>>> me think that it could be related to the use of an inappropriated 
>>> motif library.
>>>
>>> However, looking in more details I see with a make VERBOSE=1 that my 
>>> rc file is not built
>>> (I do not see the line "Building RC object ..."). even if it is 
>>> declared as one of my sources files.
>>>
>>> Is there some extra commands to specify to make cmake recognize and 
>>> compile a rc file ?
>>>
>>> thanks
>>>
>>> Eric
>>>       
>>> ------------------------------------------------------------------------
>>>
>>> --
>>>
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.cmake.org/mailman/listinfo/cmake


-- 
Eric Pellegrini
Calcul Scientifique
Institut Laue-Langevin
Grenoble, France



More information about the CMake mailing list