[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