没有找到原生的(CMake 的文档真心烂)。然后看到一个实现,改了一下可以用过,这是最小测试样例:
project( filter_out )
cmake_minimum_required( VERSION 2.6 )
macro( filter_out FILTERS INPUTS OUTPUTS )
set( FOUT "" )
foreach( INP ${INPUTS} )
set( FILTERED 0 )
foreach( FILT ${FILTERS} )
if( ${FILTERED} EQUAL 0 )
if( "${FILT}" STREQUAL "${INP}" )
set( FILTERED 1 )
endif( "${FILT}" STREQUAL "${INP}" )
endif( ${FILTERED} EQUAL 0 )
endforeach( FILT ${FILTERS} )
if( ${FILTERED} EQUAL 0 )
set( FOUT ${FOUT} ${INP} )
endif( ${FILTERED} EQUAL 0 )
endforeach( INP ${INPUTS} )
set( ${OUTPUTS} ${FOUT} )
endmacro( filter_out FILTERS INPUTS OUTPUTS )
set( INPUTS foo bar baz FOO BAR BAZ )
set( FILTERS foo FOO baz BAZ )
filter_out("${FILTERS}" "${INPUTS}" OUTPUTS )
message( STATUS "outputs are: ${OUTPUTS}")
输出(去掉了无关紧要的内容):
outputs are: bar;BAR
可以看到可以去掉完全 match 的内容。但,能不能按照正则过滤?
比如我想过滤掉 ".*CMakeCXXCompilerId.cp?p?$"。
上面的实现必须得指定 "D:gitcmake-templatesqt4buildCMakeCXXCompilerId.c" 和 "D:gitcmake-templatesqt4buildCMakeCXXCompilerId.cpp" 才能过滤。实在太不友好。
参考:https://cmake.org/Wiki/CMakeMacroFilterOut
现在已经解决了:https://github.com/district10/cmake-templates/tree/master/qt4-project
就跟 Linux 下的
qmake -project
qmake
make
一样。
在写问题的时候发现找到了解决方案(虽然丑了一点):
输出为:
有没有更好的答案?