Thread: [CEDET-devel] Howto set up ece-cpp-root-project :spp-files
Brought to you by:
zappo
From: Yang L. <ya...@cs...> - 2011-01-18 00:55:20
|
I am working on a c++ project. In its directory root, there are 3 directories (include,source,config). "include" has all header files. "source" has all the source code. "config" has a header file "config.h" generated by congfiure and autoheader. In config.h, there is a line like #define USE_MYSQL 1 Here is my setup of ede project. (ede-cpp-root-project "test" :name "test" :file "/PATH/TO/PROJECT/ROOT/INSTALL" :include-path '("/include") :spp-table '(("TEST"."1234")) :spp-files '("config/config.h") ) ) Open source/test.c, I run semantic-lex-spp-describe and found TEST "1234". The problem is I can not find USE_MYSQL. I saw the comment inside "ede-cpp-root.el". It was like The files listed in :spp-files should not start with a /, and are relative to something in :include-path. I do not quite understand the "relative to something in :include-path". Does that mean I need to add "/" into include-path? Sorry about my poor english. Hopefully you can figure out my problem. Thanks |
From: Christopher B. <chr...@ra...> - 2011-01-18 01:36:12
|
On Tue, 2011-01-18 at 00:50 +0000, Yang Liu wrote: > "/include" should this be "include" instead? |
From: Marc H. <Mar...@gm...> - 2011-01-18 09:13:44
|
Le 18/01/2011 00:50, Yang Liu a écrit : > In config.h, there is a line like > > #define USE_MYSQL 1 > > Here is my setup of ede project. > > (ede-cpp-root-project "test" > :name "test" > :file "/PATH/TO/PROJECT/ROOT/INSTALL" > :include-path '("/include") > :spp-table '(("TEST"."1234")) > :spp-files '("config/config.h") > ) > ) > > Open source/test.c, I run semantic-lex-spp-describe and found TEST "1234". > > The problem is I can not find USE_MYSQL. Once I spent a lot of time trying to use :spp-files and it never worked at all. Nothing ever happened in semantic-lex-cpp-describe, neither in semantic-lex-c-preprocessor-symbol-file. I gave up and make do with the others (:file, :include-path and :spp-table). They all work for me. |
From: Marco B. <bar...@gm...> - 2011-01-18 18:34:27
|
Yang Liu <ya...@cs...> writes: > I am working on a c++ project. In its directory root, there are 3 directories > (include,source,config). > > "include" has all header files. > "source" has all the source code. > "config" has a header file "config.h" generated by congfiure and autoheader. Hi Yang, if you try to use automake also from gnu tools box, you'll find really comfortable tha auto-detected `project-am' in EDE, and with it could become really simple setup inclusion path via a local variable, `project-am-localvars-include-path' ,probably set'ed in a file like .dir-locals.el at root of project. Regards, Marco |
From: Yann L. <ya...@cs...> - 2011-01-19 00:48:24
|
Marco Bardelli <bardelli.marco <at> gmail.com> writes: > > Yang Liu <yangliu <at> cs.otago.ac.nz> writes: > > > I am working on a c++ project. In its directory root, there are 3 directories > > (include,source,config). > > > > "include" has all header files. > > "source" has all the source code. > > "config" has a header file "config.h" generated by congfiure and autoheader. > > Hi Yang, if you try to use automake also from gnu tools box, you'll find > really comfortable tha auto-detected `project-am' in EDE, and with it > could become really simple setup inclusion path via a local variable, > `project-am-localvars-include-path' ,probably set'ed in a file like > .dir-locals.el at root of project. > > Regards, > Marco > > ------------------------------------------------------------------------------ > Protect Your Site and Customers from Malware Attacks > Learn about various malware tactics and how to avoid them. Understand > malware threats, the impact they can have on your business, and how you > can protect your company and customers by using code signing. > http://p.sf.net/sfu/oracle-sfdevnl > Hi Marco Bardelli, This is what I put in .dir-local.el at the root of the project. (setq project-am-localvars-include-path '("include/" "config/") Here is the output after running "ede-adebug-project". ] Name: "src" ] Class: #'project-am-makefile ] expanded : nil ] :name "src" ] :version "1.0" ] :directory "/PATH/TO/source/" ] dirinode 1442100 ] :file "/PATH/TO/source/Makefile.am" ] rootproject : nil ] subproj : nil ] :targets #<list o' stuff: 12 entries> ] locate-obj #unbound ] :tool-cache #unbound ] :mailinglist "" ] :web-site-url "" ] :web-site-directory "" ] :web-site-file "" ] :ftp-site "" ] :ftp-upload-site "" ] :configurations #<list o' stuff: 2 entries> ] :configuration-default "debug" ] :local-variables : nil ] configureoutputfiles : nil But the symbol map is still not updated. Thanks Yann |
From: Marco B. <bar...@gm...> - 2011-01-28 01:34:22
|
Yann Liu <ya...@cs...> writes: [...snip...] > > Hi Marco Bardelli, Hi Yann, > This is what I put in .dir-local.el at the root of the project. > > (setq project-am-localvars-include-path '("include/" "config/") The "format" to use in .dir-locals.el is quitely strange and not so documented, but you can't use any function in it, but only a list of cons, associating mode to variables. Usually i use: -- ((c-mode . ((project-am-localvars-include-path . ("/usr/include/gtk-2.0" "/usr/lib/gtk-2.0/include" "/PATH/TO/MY/OWN/PRJ/include") )))) -- You can put `nil' instead `c-mode' to affect any modes, but is not so usefull. I use absolute path also for project-local dirs, but could be useless if you have correctly set'ed up the Automake hierarchy. > Here is the output after running "ede-adebug-project". > > ] Name: "src" > ] Class: #'project-am-makefile > ] expanded : nil > ] :name "src" > ] :version "1.0" > ] :directory "/PATH/TO/source/" > ] dirinode 1442100 > ] :file "/PATH/TO/source/Makefile.am" > ] rootproject : nil > ] subproj : nil > ] :targets #<list o' stuff: 12 entries> > ] locate-obj #unbound > ] :tool-cache #unbound > ] :mailinglist "" > ] :web-site-url "" > ] :web-site-directory "" > ] :web-site-file "" > ] :ftp-site "" > ] :ftp-upload-site "" > ] :configurations #<list o' stuff: 2 entries> > ] :configuration-default "debug" > ] :local-variables : nil > ] configureoutputfiles : nil Thinking at this output, seems your project are not any subproject (<subdir>/Makefile.am) and also any Makefile listed in AC_CONFIG_FILES in configure.ac. Which if in yours C files you use: #include "../include/header.h" You don't need any particular settings to find symbols in header.h from C files that include it. Differently if you use #include <header.h>, locate in "include/", probably you have to setup some "-Iinclude/" CFLAGS in Makefile.am to build, and in this case you have to instruct EDE to search for headers in "-I<dirs>". In this case you have to setup the local var `project-am-localvars-include-path' like above. > > But the symbol map is still not updated. > I use the `project-am-localvars-include-path' in .dir-locals.el to include external-project dirs like /usr/include/glib-2.0 or gtk-2.0, and for local dirs simply i set a correct `include_HEADERS' variable in Makefile.am. In this way i say to EDE that headers (in include_HEADERS) are members of my project and which symbols in these files are found. > Thanks > Yann Regards, Marco |
From: Jed B. <je...@59...> - 2011-02-25 11:30:36
|
On Tue, Jan 18, 2011 at 01:50, Yang Liu <ya...@cs...> wrote: > I saw the comment inside "ede-cpp-root.el". It was like > > The files listed in :spp-files should not start with a /, and are relative > to > something in :include-path. > I can't get this to work at all. I started with :include-path '("/include" "/arch/include") :spp-files '("fooconf.h") I want to get the symbols in /path/to/foo/arch/include/fooconf.h, but this does not work. I've tried putting "/path/to/foo/arch/include/fooconf.h", "/arch/include/fooconf.h", and "arch/include/fooconf.h", but I get the same error every time: Cannot find file fooconf.h in project. [2 times] This occurs with the release version of cedet and with the latest bzr, with emacs-23.2 and the latest bzr. Does this work for anyone? Would it be difficult to fix? Note that semantic picks up the file correctly later, it's just the preprocessor table that does not get used. |