[CMake] RC compiler on Linux - new problem

pellegrini pellegrini at ill.fr
Tue Oct 25 04:16:18 EDT 2011


Hi Michael,

I tried to adapt the files you gave me to my project. It almost works. 
As a reminder, there were a CMakeLists.txt with an overloaded 
add_executable function that created a sym_link for the rc files and a 
shell  file (rc.sh) used to suit the rc compiler call to my needs.

I found one problem that I still not have solved. The shell script is 
declared under the following command:

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "bash rc.sh 
<CMAKE_RC_COMPILER> <SOURCE> <OBJECT>")

However, this command makes that even my f90 files uses the rc compiler 
which obvioulsy makes my build crash. I tried to use something like 
set_property(SOURCE myrcfile.rc PROPERTY RULE_LAUNCH_COMPILE ... in 
order to apply the patch only when a rc file is under process but 
unfortunately this property is not a valid source properties.

Would you see any way to circumvent that problem ?

thanks

Eric

pellegrini a écrit :
> 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