8

我有一个目录,其中包含属于组成 Qt 项目的集合的文件,以及不属于其他文件的文件。也就是说,文件 A.cxx、ADriver.cxx 和 A.ui 都属于需要使用 Qt 选项编译的集合。然后我有一个非 qt 文件 B.cxx。那么 C.cxx、CDriver 和 C.ui 是另一个 Qt 集合。有几十个,所以我想使用 glob 而不是手动编写每个 add_executable。我正在考虑做类似的事情

for(all ui files) 
  create an executable from the ui and its matching .cxx and *Driver.cxx"
end

那么所有“保留”的cxx文件(上面循环中没有用到)都是非Qt的,需要自己编译。我的问题是如何从“集合”中“减去”文件。也就是说,要使用上述方法,我必须拥有一组所有 cxx 文件,并删除在 .ui 文件循环中使用的文件。这可能吗?有没有更好的方法来做这样的事情?

4

1 回答 1

9

首先,使用 glob 收集所有文件:

file(GLOB ALL_SRCS *)

ALL_SRCS然后选择 ui 文件并为它们创建 Qt 目标,同时从列表中减去它们:

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()

在此之后,您将拥有所有非 qt 源文件ALL_SRCS

于 2012-10-29T03:36:26.923 回答