[CMake] RC compiler on Linux - new problem

Michael Hertling mhertling at online.de
Fri Oct 21 19:19:06 EDT 2011


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
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: CMakeLists.txt
URL: <http://www.cmake.org/pipermail/cmake/attachments/20111022/e6f02cd3/attachment.txt>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rc.sh
Type: application/x-sh
Size: 305 bytes
Desc: not available
URL: <http://www.cmake.org/pipermail/cmake/attachments/20111022/e6f02cd3/attachment.sh>


More information about the CMake mailing list