2012-10-29 73 views
7

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

回答

8

首先,收集所有的文件有水珠:

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

+0

@arrowdodget啊,我认为REMOVE_ITEM正是我所期待的。一旦我尝试了一下,我会接受答案 - 谢谢! –