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 <[email protected]> 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 > >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers
