从集中删除文件

时间:2012-10-29 00:55:21

标签: cmake

我有一个目录,其中的文件属于构成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文件循环中使用的文件。这可能吗?有没有更好的方法来做这样的事情?

1 个答案:

答案 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来源。