User forums > General (but related to Code::Blocks)
How to use custom build feature with flex/bison?
(1/1)
jahurtado:
Hi,
I have a program that use flex++/bison++ to generate a parser and I don't know how to use the custom build settings in order to generate c++ output files inside my codeblocks project.
I have these rules into my hand-made Makefile:
--- Code: ---scanner.cpp: scanner.l
$(FLEX) -hscanner.h -oscanner.cpp scanner.l
parser.cpp: parser.y scanner.cpp
$(BISON) -d -v -hparser.h -oparser.cpp parser.y
--- End code ---
Output files are scanner.h/.cpp and parser.h/.cpp. I have tried to create a custom build with:
--- Code: ---$FLEX -h$DIR\scanner.h -o$DIR\scanner.cpp $FILENAME
--- End code ---
but it doesn't work, this hang up the compilation process.
Any idea?
Regards,
José Antonio.
Urxae:
If you want to enter things like $FLEX into C::B options, you'll have to either define a custom variable or an environment variable of that name for it to be substituted automatically. Another option is doing it manually, ie using flex (or whatever) instead of $FLEX. C::B doesn't know what $FLEX is unless you tell it.
Or, since you already have a working custom makefile, you can always just check 'Custom makefile' in your project properties and use that. This does have the disadvantage that you have to keep it up-to-date manually, of course.
jahurtado:
--- Quote from: Urxae on November 28, 2005, 06:14:02 pm ---If you want to enter things like $FLEX into C::B options, you'll have to either define a custom variable or an environment variable of that name for it to be substituted automatically. Another option is doing it manually, ie using flex (or whatever) instead of $FLEX. C::B doesn't know what $FLEX is unless you tell it.
--- End quote ---
I have solved the problem (I have already defined custom variables $FLEX and $BISON on codeblocks, so this was not the problem).
It seems that variables like $FILENAME or $DIR don't work and they are replaced by an empty string. I have made the folowing test, I put inside custom build command this text:
echo "testing $FLEX $DIR $NAME $BASE $FILENAME variables"
and when I build the project I get:
testing C:\FLEX\flex++ variables.
So, it seems that those variables are not defined
Is it a bug?
Urxae:
From src/sdk/macrosmanager.cpp :
--- Code: ---/*
standard macros are:
${PROJECT_FILENAME} ${PROJECT_FILE} ${PROJECTFILE}
${PROJECT_NAME}
${PROJECT_DIR} ${PROJECTDIR} ${PROJECT_DIRECTORY}
${CODEBLOCKS} ${APP_PATH} ${APPPATH}
${DATA_PATH} ${DATAPATH}
${PLUGINS}
${ACTIVE_EDITOR_FILENAME}
${ALL_PROJECT_FILES}
${MAKEFILE}
${FOO_OUTPUT_FILE} // per target
${BAR_OUTPUT_DIR} // per target
$(TARGET_OUTPUT_DIR) // the current target's out dir
$(TARGET_NAME) // the current target's name (title)
${AMP} TODO: implement AddMacro() for custom macros (like this)
*/
--- End code ---
So it's not a bug: those aren't predefined macros. If you could explain what exactly you're trying to achieve maybe someone can help you. Or maybe the above list was enough?
jahurtado:
--- Quote from: Urxae on November 28, 2005, 09:53:47 pm ---So it's not a bug: those aren't predefined macros. If you could explain what exactly you're trying to achieve maybe someone can help you. Or maybe the above list was enough?
--- End quote ---
When you open the options (click on properties with right button) of a file and go to "build" tab, dialog show a message that says:
You can use the following variables:
$DIR: returns the directory where the file resides
$NAME: returns just the filename
$BASE: returns...
but when you use these variables into the custom build command, they aren't replaced with the description showed above.
It means that these variables are predefined, and available for your custom command but it isn't.
If this set of variables are not predefined I find the text showed on file options dialog a little bit confusing. Anyway, I solved the initial problem.
Thanks.
Navigation
[0] Message Index
Go to full version