使用库设置emacs EDE项目

Setting up an emacs EDE-project with libraries

本文关键字:EDE 项目 emacs 设置      更新时间:2023-10-16

我已经在SO上徒劳地搜索了emacs文档、cedet网站和这里。如果我的问题已经得到回答,可以自由地(指出现有的答案)关闭它。

我正在努力熟悉emacs中的EDE项目。到目前为止,我可以用一个或多个文件设置一个简单的项目。

现在,我想将代码的一部分分离出来,并将其打包到库中。基本上,我正在努力实现与以下手写的天真Makefile相同的东西:

matrix:
  g++ -c -o lib/libmatrix.o lib/matrix.cpp -std=c++0x
  ar crf lib/libmatrix.a lib/libmatrix.o
num:
    g++ num.cpp -Llib -Ilib -std=c++0x -o num -g

在这里,我有一个由"lib/matrimatrix.h"answers"lib/metrimatrix.cpp"(这是矩阵类型的玩具实现)组成的库,以及一个使用矩阵的文件"num.cpp"。

我不知道如何告诉emacs正确编译矩阵。到目前为止,我得到了以下EDE项目,但它当然没有编译。

;; Object Numbers
;; EDE project file.
(ede-proj-project "Numbers"
  :name "Numbers"
  :file "Project.ede"
  :targets (list 
   (ede-proj-target-makefile-program "num"
    :name "num"
    :path ""
    :source '("num.cpp")
    :compiler 'ede-g++-compiler
    :linker 'ede-g++-linker
    :configuration-variables 'nil
    :ldflags '("-std=c++0x" "-Llib" "-Ilib")
    :ldlibs '("matrix")
    )
   (ede-proj-target-makefile-archive "matrix"
    :name "matrix"
    :path "/lib"
    :source '("matrix.cpp")
    :compiler 'ede-g++-compiler
    :linker 'ede-archive-linker
    :configuration-variables 'nil
    )
   )
  :configuration-variables 'nil
  )

因此,

我想我解决了。我自己回答这个问题,以防有人遇到同样的困难。

基本上,我需要在目录"lib/"中定义一个子项目,用于编译和归档库。

我现在有以下文件

include/
    matrix.h
lib/
    Project.ede
    matrix.cpp
Project.ede
num.cpp

配置文件lib/Project.ede是负责库的子项目,它看起来像这样:

;; Object matrix
;; EDE project file.
(ede-proj-project "matrix"
  :name "matrix"
  :file "Project.ede"
  :targets (list 
   (ede-proj-target-makefile-archive "matrix"
    :name "matrix"
    :path ""
    :source '("matrix.cpp")
    :configuration-variables '(("debug" ("CPPFLAGS" . "-I../include -std=c++0x -g"))    ("release" ("CPPFLAGS" . "-I../include -std=c++0x")))
    )
   )
  )

主文件/Project.ede看起来像这样:

;; Object num
;; EDE project file.
(ede-proj-project "num"
  :name "num"
  :file "Project.ede"
  :targets (list 
   (ede-proj-target-makefile-program "num"
    :name "num"
    :path ""
    :source '("num.cpp")
    :configuration-variables '(("debug" ("CPPFLAGS" . "-std=c++0x -Iinclude")) ("release" ("CPPFLAGS" . "-std=c++0x -Iinclude")))
    :ldflags '("-Llib")
    :ldlibs '("matrix")
    )
   )
  )