我有一個目錄結構自動工具 - 編譯但不分發
src
\__lib_foo
| \__ foo.c foo.h
\__ main
\__ main.c main.h
主要是主應用程序和使用的main.c在foo.c.定義的一些功能 對我的要求是「lib_foo必須編譯但不能分發」..我怎麼能實現這個?
在此先感謝
我有一個目錄結構自動工具 - 編譯但不分發
src
\__lib_foo
| \__ foo.c foo.h
\__ main
\__ main.c main.h
主要是主應用程序和使用的main.c在foo.c.定義的一些功能 對我的要求是「lib_foo必須編譯但不能分發」..我怎麼能實現這個?
在此先感謝
編譯的程序從來沒有分發,但源編譯的程序當然是一般分佈。 (沒有源代碼的情況下,源代碼發佈中沒有太多的意義)。還有nodist_*_SOURCES
(參見automake手冊中的第14.2章細粒度分佈控制)。還要注意,BUILT_SOURCES
默認爲非點對點,除非被覆蓋,例如,
bin_PROGRAMS = foo
nodist_foo_SOURCES = foo.c
BUILT_SOURCES = foo.c
但:
bin_PROGRAMS = foo
foo_SOURCES = foo.c
BUILT_SOURCES = foo.h
的autotools提供分發源代碼,而不是編產品的框架。如果這是您的問題,您可以輕鬆使用自動化項目來構建二進制包(rpm,deb,pkg等)並分發該包。另一方面,如果你只是在尋找一種方法來使用foo.c來構建一個在構建過程中靜態鏈接main的便利庫,那麼(假設你正在使用automake)你想要把它放在Makefile中。 am:
bin_PROGRAMS= main noinst_LIBRARIES = libfoo.a libfoo_a_SOURCES = foo.c
如果將foo.c的名稱更改爲libfoo.c,則不需要第三行。
- 編輯後的問題是編輯,以顯示非扁平的目錄結構 -
如果你沒有在同一目錄下的foo.c和main.c中,有涉及更多的工作。 在頂層/ Makefile.am:
# You must list lib_foo first SUBDIRS = lib_foo main在lib_foo
/Makefile.am
noinst_LIBRARIES = libfoo.a libfoo_a_SOURCES = foo.c
和在主/ Makefile.am
bin_PROGRAMS = main main_LDADD = ../lib_foo/libfoo.a