Настройка EDE-проекта emacs с библиотеками - PullRequest
5 голосов
/ 25 июня 2011

Я уже искал документацию emacs, веб-сайт cedet и здесь на SO напрасно. Если на мой вопрос уже дан ответ, не стесняйтесь (укажите на существующий ответ и) закройте его.

Я пытаюсь ознакомиться с EDE-проектами в emacs. Пока я могу настроить простой проект с одним или несколькими файлами.

Теперь я хотел бы отделить часть моего кода и упаковать его в библиотеку. По сути, я пытаюсь добиться того же, что и со следующим написанным от руки наивным 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 / matrix.h" и "lib / matrix.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
  )

1 Ответ

3 голосов
/ 26 июня 2011

Итак,

Мне кажется, я решил это.Я отвечаю на вопрос сам, на случай, если кто-то столкнется с такими же трудностями.

В основном мне нужно было определить подпроект в каталоге "lib /", который компилирует и архивирует библиотеку.

Теперь у меня есть следующие файлы

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

. Config-файл 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")
    )
   )
  )
...