这段时间又开始用 cmake 来进行代码的编译,顺便写个 Fluent UDF 的 CMakeLists.txt。功能主要是要根据源码文件来生产 udf_names.c,导出的变量和函数都在这里。
问题的关键在于源码文件内容的扫描,匹配,截取和输出。Fluent 自带的 Makefile 用的是 sed 来截取的。原本打算沿用 sed,但是发现调用老是出问题,引号问题太烦人。后来就用 cmake 自己的文件和字符串功能了。
#-----------------------------------------------------------------------------
# udf_names.c
#
#-----------------------------------------------------------------------------
set (UDFDATA ${hylab_BINARY_DIR}/udf_names.c)
set (UDF_NAMES "" CACHE INTERNAL "" FORCE)
#
function(extract_udf_names l)
foreach (line ${l})
if(line MATCHES "^DEFINE_[_A-Z]*(.*$)")
string(REGEX REPLACE "^DEFINE_([_A-Z]*\\(.*\\))$" "\\1" result ${line})
Message("-- ${result}")
file(APPEND ${UDFDATA} "extern DEFINE_${result};\n")