使用Stack构建,我在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
文件复制到{{1 }},这很愚蠢。
有更好的方法吗?
更多信息:
我的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
的位置,而不是自动将其放置在那里。
答案 0 :(得分:1)
如果Stack具有某种适当的方式来执行此操作,我真的很喜欢,但是AFAIK却没有。
我目前在具有类似要求的项目中所做的是,我符号链接,而不是将_stub.h
文件复制到更方便的位置。只需执行一次,即可将符号链接置于版本控制下,然后对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上将不起作用,但是可能有类似的替代方法。