我同意 Adam Burry 的观点,即单独的脚本可能最适合这个。不确定您熟悉哪些语言,但这里有一个可以完成这项工作的快速 Python 脚本:
#!/usr/bin/python
'''Makes a .m file from an enum in a C++ source file.'''
from __future__ import print_function
import sys
import re
def parse_cmd_line():
    '''Gets a filename from the first command line argument.'''
    if len(sys.argv) != 2:
        sys.stderr.write('Usage: enummaker [cppfilename]\n')
        sys.exit(1)
    return sys.argv[1]
def make_m_file(cpp_file, m_file):
    '''Makes an .m file from enumerations in a .cpp file.'''
    in_enum = False
    enum_val = 0
    lines = cpp_file.readlines()
    for line in lines:
        if in_enum:
            # Currently processing an enumeration
            if '}' in line:
                # Encountered a closing brace, so stop
                # processing and reset value counter
                in_enum = False
                enum_val = 0
            else:
                # No closing brace, so process line
                if '=' in line:
                    # If a value is supplied, use it
                    ev_string = re.match(r'[^=]*=(\d+)', line)
                    enum_val = int(ev_string.group(1))
                # Write output line to file
                e_out = re.match(r'[^=\n,]+', line)
                m_file.write(e_out.group(0).strip() + '=' +
                        str(enum_val) + ';\n')
                enum_val += 1
        else:
            # Not currently processing an enum,
            # so check for an enum definition
            enumstart = re.match(r'enum \w+ {', line)
            if enumstart:
                in_enum = True
def main():
    '''Main function.'''
    # Get file names
    cpp_name = parse_cmd_line()
    m_name = cpp_name.replace('cpp', 'm')
    print('Converting ' + cpp_name + ' to ' + m_name + '...')
    # Open the files
    try:
        cpp_file = open(cpp_name, 'r')
    except IOError:
        print("Couldn't open " + cpp_name + ' for reading.')
        sys.exit(1)
    try:
        m_file = open(m_name, 'w')
    except IOError:
        print("Couldn't open " + m_name + ' for writing.')
        sys.exit(1)
    # Translate the cpp file
    make_m_file(cpp_file, m_file)
    # Finish
    print("Done.")
    cpp_file.close()
    m_file.close()
if __name__ == '__main__':
    main()
./enummaker.py testenum.cpp在该名称的以下文件上运行:
/* Random code here */
enum LogID {
    LOG_ID_ITEM1=0,
    LOG_ID_ITEM2,
    LOG_ID_ITEM3=10,
    LOG_ID_ITEM4
};
/* More random code here */
enum Stuff {
    STUFF_ONE,
    STUFF_TWO,
    STUFF_THREE=99,
    STUFF_FOUR,
    STUFF_FIVE
};
/*  Yet more random code here */
生成一个testenum.m包含以下内容的文件:
LOG_ID_ITEM1=0;
LOG_ID_ITEM2=1;
LOG_ID_ITEM3=10;
LOG_ID_ITEM4=11;
STUFF_ONE=0;
STUFF_TWO=1;
STUFF_THREE=99;
STUFF_FOUR=100;
STUFF_FIVE=101;
该脚本假定enum块的右大括号始终位于单独的行上,第一个标识符定义在左大括号之后的行上,大括号之间没有空行,enum出现在行首,和数字后面没有空格=。很容易修改脚本以克服这些限制。你可以让你的makefile自动运行它。