c++ - Are there noteworthy uses of m4 besides autoconf? -
does know of uses of m4
besides autoconf (preferably in c or c++ environment) more academic excerise, because helped solve problem otherwise (for example 'standard' preprocessor) have been difficult solve.
i ask because thinking way project in c++ want reduce or minimize redundancies using scripts, preprocessors, whatevers.
i have once used m4 generate c++ header file text file containing simple version string (major.minor.micro-status), , information subversion, windows visual studio project.
m4 smallest macro engine embed , use specific goal.
it looked this:
#ifndef __version_h__ #define __version_h__ divert(-1) define(`cpp_define', `#define $1 $2') define(`version', include(`version.txt')) define(`my_software_major', regexp(version, `\([0-9]+\)\.[0-9]+\.[0-9]+', `\1')) define(`my_software_minor', regexp(version, `[0-9]+\.\([0-9]\)+\.[0-9]+', `\1')) define(`my_software_micro', regexp(version, `[0-9]+\.[0-9]+\.\([0-9]\)+', `\1')) define(`my_software_status', regexp(version, `\(-\w+\)', `\1')) define(`svn_rev', `regexp(esyscmd(svnversion -n), `[0-9]+', `\&')') ifelse(len(svn_rev), 0, `define(`no_svn')') divert cpp_define(my_software_version, format(`"%s.%s.%s"', my_software_major, my_software_minor, my_software_micro)) cpp_define(product_version, format(`"%s.%s.%s%s"', my_software_major, my_software_minor, my_software_micro, my_software_status)) cpp_define(copyright_notice, `"copyright (c) 2008 - me"') ifdef(`no_svn', ` cpp_define(about_version, format(`"my software version %s.%s.%s%s"', my_software_major, my_software_minor, my_software_micro, my_software_status)) cpp_define(file_version, format(`"%s.%s.%s"', my_software_major, my_software_minor, my_software_micro)) cpp_define(info_version, format(``%s,%s,%s,0'', my_software_major, my_software_minor, my_software_micro)) ', ` cpp_define(about_version, format(`"my software version %s.%s.%s.%s%s"', my_software_major, my_software_minor, my_software_micro, svn_rev, my_software_status)) cpp_define(file_version, format(`"%s.%s.%s.%s"', my_software_major, my_software_minor, my_software_micro, svn_rev)) cpp_define(info_version, format(``%s,%s,%s,%s'', my_software_major, my_software_minor, my_software_micro, svn_rev)) ') #endif /* __version_h__ */
although worked perfectly, experiment did not reiterate, because prefer using cmake's builtin capabilities handle stuff directly , generate visual studio project files.
Comments
Post a Comment