我有一个目录,其中的文件属于构成Qt项目的集合,而其他文件则不属于。也就是说,文件A.cxx,ADriver.cxx和A.ui都属于需要使用Qt选项编译的集合。然后我有一个非qt的文件B.cxx。然后C.cxx,CDriver和C.ui是另一个Qt集。有几十个,所以我想使用globs而不是手动编写每个add_executable。我在想做像
这样的事情for(all ui files)
create an executable from the ui and its matching .cxx and *Driver.cxx"
end
然后所有“保留”(未在上面的循环中使用)的cxx文件都是非Qt,需要自己编译。我的问题是如何从“集合”中“减去”文件。也就是说,要使用上述方法,我必须拥有一组所有cxx文件,并删除在.ui文件循环中使用的文件。这可能吗?有没有更好的方法来做这样的事情?
答案 0 :(得分:8)
首先,使用glob收集所有文件:
file(GLOB ALL_SRCS *)
然后选择ui文件并为它们创建Qt目标,同时从ALL_SRCS
列表中减去它们:
file(GLOB UIS *.ui)
foreach(ui ${UIS})
get_filename_component(f ${ui} NAME_WE)
# Do Qt stuff
qt4_wrap_ui( ${f}uis ${ui} )
qt4_wrap_cpp( ${f}srcs ${f}.cpp ${f}Driver.cpp )
add_executable( ${f} ${f}uis ${f}srcs )
list(REMOVE_ITEM ALL_SRCS ${ui} ${f}.cpp ${f}Driver.cpp)
endforeach()
在此之后,您将拥有ALL_SRCS
中的所有非qt来源。