[cmake-developers] [PATCH] Qt4Macros generate resources with same file name

Joseph Shen joseph.smeng at gmail.com
Mon Nov 30 11:50:33 EST 2015


Yes, I found that. Thanks for the view, I will work an more acceptable
patch later this week.

Have a nice day~~

On Mon, Nov 30, 2015, 11:48 PM Clinton Stimpson <clinton at elemtech.com>
wrote:

> On Tuesday, November 24, 2015 11:01:27 AM Joseph Shen wrote:
> > Dear CMake developers:
> >
> > Please view attached small patch that try to fix Qt4Macros generate
> > resources with same file name error.
> >
> > Right now, in the CMake main branch, using cmake with Qt4 library
> > add resources project can be done like this:
> >
> >      qt4_add_resources(app_source_res res_a.qrc)
> >      qt4_add_resources(app_source_res res_b.qrc)
> >
> > and above two line added two resource file, but if we try to add resource
> > file with same name, a very subtle error will happen: only one file will
> > be compile the as resources, and the other was totally ignored.
> >
> > In some big projects, using the same file name as resource file name
> > can be very common, especially when we using multi cmake files try
> > to make the whole project into small ones, in each cmake files someone
> > maybe just using the same resources file name like res.qrc which is
> > located in the sub module resources folder.
> >
> >        qt4_add_resources(app_source_res res.qrc)
> >
> > so, if they try to do this, and in the last add ${app_source_res} to the
> > dependency list using:
> >
> >       add_executable(project_name ${app_source_res} ...)
> >
> > but in reality they just add one resources file, but CMake do not report
> > any error or warning.
> >
> > From the source of Qt4Macros we can see:
> >
> > line 211:   get_filename_component(outfilename ${it} NAME_WE)
> > line 244:   ARGS ${rcc_options} -name ${outfilename} -o ${outfile}
> ${infile}
> >
> >
> > became we just using NAME_WE as the output file, if two files with same
> > file name, one will overwrite the other, and this is the reason why the
> > error
> > will happen.
> >
> > To fix this, I view the whole Qt4Macros source file, find a function
> > QT4_MAKE_OUTPUT_FILE already exist to do something just what we
> > need. so I work out a patch add two line code and remove two, and it
> works
> > good to me, and I think this might fix the problem.
> >
> > Please view this patch, thanks :)
>
>
> Back on list with a more concrete example, and also to prevent others from
> merging this patch, because I don't think this patch should be accepted.
> The
> random string breaks using the Q_INIT_RESOURCE() macro.
>
>
> For example:
> =======
> project(qrc)
>
> find_package(Qt4)
> include(${QT_USE_FILE})
>
> qt4_add_resources(qrc_srcs ${CMAKE_CURRENT_SOURCE_DIR}/my.qrc)
>
> add_library(qrc STATIC ${qrc_srcs})
>
> add_executable(main main.cpp)
> target_link_libraries(main qrc)
> ========
>
> main.cpp has:
> int main()
> {
>   Q_INIT_RESOURCE(my);
> }
>
> With the patch applied, I now get the link error:
>
> main.cpp:(.text+0x5): undefined reference to `qInitResources_my()'
>
> "my" comes from the basename of my.qrc, and is the name used for the
> resource.
> With CMake generating a random name, there would be no way to reference
> that
> name when calling Q_INIT_RESOURCE.
>
> I would prefer allowing the caller to pass in an alternate -name option for
> rcc, as I said in my first review.  With that, the caller would be able to
> pass
> a random string.
>
> Clint
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20151130/4e1e15fe/attachment-0001.html>


More information about the cmake-developers mailing list