2017-02-16 13 views
0

РЕДАКТИРОВАТЬ: Возможно, я не был изначально понятен.Как установить символическую ссылку на один из двух установленных исполняемых файлов?

В «сделать установку» Я хочу, чтобы пользователь установка, чтобы быть в состоянии установить символическую ссылку, «привет», что ссылки либо прог, который статически связаны между собой, «helloStatic» или прога, которая динамически связаны между собой, "helloShared." См. Мой ответ.

Я в настоящее время сборки и установки:

  • HelloShared, что мой main.o связан с моей общей библиотеки libsay.la
  • HelloStatic, что мой main.o связан с моей статической библиотеки libsay.a

Я также хотел бы установить Hello, что будет символической ссылкой на HelloShared или HelloStatic.

Я предполагаю, что выбор будет сделан путем предоставления возможности либо настроить, либо сделать?

В основном я интересуюсь * nix или cygwin, хотя, как это сделать при установке Windows, было бы неплохо.

Recap, я хочу, чтобы два встроенных исполняемых файла были установлены и, кроме того, символическая ссылка на исполняемый файл, который инсталлятор хочет быть «нормальной» версией. В идеале также используется ссылка по умолчанию, если ни один не выбран.

Начал с некоторых исходных файлов, я создал configure.ac с autoscan, а затем при необходимости создавал их.

Мой рабочий процесс:

  • autorconf -i
  • ./configure
  • сделать

После макияжа я получаю:

$ file hello* 
helloShared: Bourne-Again shell script, ASCII text executable, with very long lines 
helloStatic: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=f56d94fbc40359aced749759231d3e7ae39587a0, not stripped 

Мои файлы:

$ tree -a 
├── configure.ac 
├── lib 
│   ├── say.c 
│   └── say.h 
├── m4 
├── Makefile.am 
└── src 
    └── main.c 

3 directories, 5 files 

########## 

$ cat configure.ac 
#            -*- Autoconf -*- 
# Process this file with autoconf to produce a configure script. 

AC_PREREQ([2.69]) 
AC_INIT([Hello], [0.1]) 
AC_CONFIG_SRCDIR([lib/say.h]) 
AC_CONFIG_HEADERS([config.h]) 

AC_CONFIG_AUX_DIR([build-aux]) 
AM_INIT_AUTOMAKE([foreign subdir-objects -Wall -Werror]) 
AC_CONFIG_FILES([Makefile]) 

AC_CONFIG_MACRO_DIRS([m4]) 

# Checks for programs. 
AC_PROG_CC 
AM_PROG_AR 

LT_INIT 

# Checks for libraries. 

# Checks for header files. 

# Checks for typedefs, structures, and compiler characteristics. 

# Checks for library functions. 

AC_OUTPUT 

########## 

$ cat Makefile.am 
ACLOCAL_AMFLAGS = -I m4 

pkglib_LTLIBRARIES = libsay.la 
libsay_la_SOURCES = \ 
    lib/say.c 

libsay_la_CFLAGS = -I lib 

pkglib_LIBRARIES = libsay.a 
libsay_a_SOURCES = \ 
    lib/say.c 

libsay_a_CFLAGS = -I lib 

include_HEADERS = \ 
    lib/say.h 

bin_PROGRAMS = helloShared helloStatic 

helloShared_SOURCES = \ 
    src/main.c 
helloShared_CFLAGS = -I lib 
helloShared_LDADD = libsay.la 

helloStatic_SOURCES = \ 
    src/main.c 
helloStatic_CFLAGS = -I lib 
helloStatic_LDADD = libsay.a 

ответ

0

Вот мое решение (на данный момент) на мой собственный вопрос. Я не отмечу это как принято, потому что:

  • Я не уверен, что «? =» Переносится через разные марки.
  • Он чувствует себя как резервный.
  • Я не знаю, есть ли еще более простой способ сделать это.

настроить.переменный ток:

AC_PROG_LN_S 

Makefile.am:

LINK_HELLO_TO ?= helloStatic 

install-exec-hook: 
    (cd ${bindir}; $(LN_S) $(LINK_HELLO_TO) hello) 

uninstall-hook: 
    (cd ${bindir}; rm -f hello) 

рабочий процесс развития:

$ autoreconf 

$ ./configure 

$ make 

$ sudo make install # Accept default sym link. 

# Or explicitly set default: 

$ sudo make install LINK_HELLO_TO=helloStatic 

# Or set to link to executable that links to shared lib. 

$ sudo make install LINK_HELLO_TO=helloShared 

$ ll -gGF /usr/local/bin/hello* 
lrwxrwxrwx 1 11 Feb 19 20:40 /usr/local/bin/hello -> helloShared* 
-rwxr-xr-x 1 9.5K Feb 19 20:40 /usr/local/bin/helloShared* 
-rwxr-xr-x 1 12K Feb 19 20:40 /usr/local/bin/helloStatic*