Как включить файл 'xxx_stub.h', сгенерированный из исходного файла haskell, при сборке с помощью Stack - PullRequest
0 голосов
/ 19 октября 2018

Здание со стеком, у меня есть lib.hs в src/ и main.c в app/.При построении lib_stub.h генерируется в .stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build.

Чтобы включить этот файл в main.c, я либо пишу полный абсолютный путь за директивой #include, либо перед вторым ручным проходом,вручную скопируйте файл lib_stub.h в app/, что довольно глупо.

Есть ли лучший способ?

Дополнительная информация:

Мой package.yaml выглядиткак

name:                mylib
version:             0.1.0.0
github:              "gituser/mylib"
license:             BSD3
author:              "Author name here"
maintainer:          "example@example.com"
copyright:           "2018 Author name here"

extra-source-files:
- README.md
- ChangeLog.md

# Metadata used when publishing your package
# synopsis:            Short description of your package
# category:            Web

# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description:         Please see the README on GitHub at <https://github.com/gituser/mylib#readme>

dependencies:
- base >= 4.7 && < 5

library:
  source-dirs: src
  dependencies:
  - free
  - mtl

executables:
  cont-demo:
    main:                main.c
    source-dirs:         app
    ghc-options:
    - -threaded
    # - -rtsopts
    # - -with-rtsopts=-N
    dependencies:
    - mylib

tests:
  mylib-test:
    main:                Spec.hs
    source-dirs:         test
    ghc-options:
    - -threaded
    - -rtsopts
    - -with-rtsopts=-N
    dependencies:
    - mylib

И моя структура пути выглядит как

.
├── app
│   ├── MyLib_stub.h
│   └── main.c
├── ChangeLog.md
├── mylib.cabal
├── LICENSE
├── package.yaml
├── README.md
├── Setup.hs
├── src
│   └── MyLib.hs
├── stack.yaml
└── test
    └── Spec.hs

, где app/MyLib_stub.h копируется вручную, а не помещается туда автоматически.

1 Ответ

0 голосов
/ 19 октября 2018

Мне бы очень понравилось, если бы в стеке был какой-то правильный способ сделать это, но AFAIK нет.

Вместо того, чтобы копировать, я сейчас делаю в проекте с аналогичными требованиями. _stub.h файл в более удобном месте, я символическая ссылка it.Это нужно сделать только один раз, символическую ссылку можно поставить под контроль версий, а затем обновления для файла LONG_PATH/....h будут автоматически отображаться в удобном.

$ ln -s dist/build/bla/bla/long/path/MyLib_stub.h app/MyLib_stub.h
$ git add app/MyLib_stub.h

Боюсь, что так и будетне работает на Windows, но, вероятно, есть аналогичная альтернатива для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...