独自のディレクトリがなく、実行可能ファイルのみを持ついくつかのユーティリティがあります。通常は/usr/local/binにバイナリを置きます。私が持っている問題の1つは、デフォルト設定を管理する方法です。
1つのアイデアは、環境変数を使用し、ユーザーにbash.rcなどの変数を定義する必要があることです。しかし、私はアプレットのさまざまなデフォルト設定を使用してbash.rcを操作するのを少し気にします。
独自のディレクトリを持たない小規模ユーティリティのデフォルト設定を保存するのに適した場所や方法を定義する標準(または標準の推奨事項)はありますか?
答え1
対話型デスクトップを使用するための小さなユーティリティが続くと予想されます。XDGの基本ディレクトリ仕様設定ファイルを次の場所に保存します。
$XDG_CONFIG_HOME
または(空または設定されていない場合)、デフォルトは
$HOME/.config
GUI以外のツールでは、ヘッドレスシステムやXDG / freedesktop規格に準拠していないシステムで実行できるため、状況はあまり明確ではありません。
$XDG_CONFIG_HOME
しかし、if setまたはif notを使用することには明らかな欠点はなく、$HOME/.config
どこでも比較的驚くべきことではありません。
答え2
歴史的に、多くのプログラムは$ HOME / . $ PROGNAMEを使用していましたが、その結果、ホームディレクトリが少し複雑になりました。これで、好ましいルールは$ HOME / .config / $ PROGNAMEのようです(現在、〜/ .configに173個のドットファイルがあり、そのほとんどは歴史的遺物であり、〜/ .configには80個です)。
2つの間に重要な違いがあることに注意してください。構成そして優先事項。前者はシステム全体のポリシーでルートのみを編集できますが、後者はユーザーが制御する必要があります。デフォルト設定は$ HOMEの外にどこにでも保存してはいけません。
答え3
より
システム全体の設定やローカルユーザー固有の構成に/usr/local/bin
合理的に使用できるように、ユーティリティをここに配置します。/usr/local/etc/{program_name}
$HOME/.{program_name}
シェルスクリプトでは、これらのパス名は次のように$0
決定できます。"/usr/local/etc/${0##*/}"
"$HOME/.${0##*/}"
答え4
小規模ユーティリティは、お気に入りをどこに保存する必要がありますか?
これはコメントの問題です!
標準(または標準の推奨事項)はありますか?
あなたは読むことができますGNUコーディング標準それからスーペリア(7)
インスピレーションを得るには、ソースコードとドキュメントを研究する必要があります。一部オープンソースソフトウェア。ところで、同意した扱いにくいそれと何が違うの?GNU バッシュとログインシェル(一般的に説明されている/etc/passwd
、参照)パスワード(5))に変更されることがあります。chsh(1);私は使用することを好むzsh
インスピレーションの源泉は、以下を含む既存のGNUプログラムです。GNU Emacsまたは湾岸協力協議会
ソースからこれらのいずれかをコンパイルするときに./configure
スクリプトを実行します(次に実行)。GNU自動設定)スクリプトは通常いくつかの--help
コマンドを受け入れます。
たとえば、GNU emacsの場合は./configure --help
次のようになります。
`configure' configures GNU Emacs 28.0.50 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/emacs]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
X features:
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-ns-self-contained
disable self contained build under NeXTstep
--enable-locallisppath=PATH
directories Emacs should search for lisp files
specific to this site
--enable-checking[=LIST]
enable expensive checks. With LIST, enable only
specific categories of checks. Categories are:
all,yes,no. Flags are: stringbytes, stringoverrun,
stringfreelist, structs, glyphs
--enable-profiling build emacs with low-level, gprof profiling support.
Mainly useful for debugging Emacs itself. May not
work on all platforms. Stops profiler.el working.
--enable-autodepend automatically generate dependencies to .h-files.
Requires gcc, enabled if found.
--enable-gtk-deprecation-warnings
Show Gtk+/Gdk deprecation warnings for Gtk+ >= 3.0
--disable-build-details Make the build more deterministic by omitting host
names, time stamps, etc. from the output.
--disable-largefile omit support for large files
--enable-gcc-warnings[=TYPE]
control generation of GCC warnings. The TYPE 'yes'
means to fail if any warnings are issued;
'warn-only' means issue warnings without failing
(default for developer builds); 'no' means disable
warnings (default for non-developer builds).
--enable-check-lisp-object-type
Enable compile time checks for the Lisp_Object data
type, which can catch some bugs during development.
--enable-link-time-optimization
build with link-time optimization (experimental; see
INSTALL)
--disable-silent-rules verbose build output (undo: "make V=0")
--enable-cross-guesses={conservative|risky}
specify policy for cross-compilation guesses
--disable-acl do not support ACLs
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--without-all omit almost all features and build small executable
with minimal dependencies
--with-mailutils rely on GNU Mailutils, so that the --without-pop
through --with-mailhost options are irrelevant; this
is the default if GNU Mailutils is installed
--with-pop Support POP mail retrieval if Emacs movemail is used
(not recommended, as Emacs movemail POP is
insecure). This is the default only on native
MS-Windows.
--with-kerberos support Kerberos-authenticated POP
--with-kerberos5 support Kerberos version 5 authenticated POP
--with-hesiod support Hesiod to get the POP server host
--with-mail-unlink unlink, rather than empty, mail spool after reading
--with-mailhost=HOSTNAME
string giving default POP mail host
--with-sound=VALUE compile with sound support (VALUE one of: yes, alsa,
oss, bsd-ossaudio, no; default yes). Only for
GNU/Linux, FreeBSD, NetBSD, MinGW, Cygwin.
--with-pdumper=VALUE enable pdumper support unconditionally ('yes', 'no',
or 'auto': default 'auto')
--with-unexec=VALUE enable unexec support unconditionally ('yes', 'no',
or 'auto': default 'auto')
--with-dumping=VALUE kind of dumping to use for initial Emacs build
(VALUE one of: pdumper, unexec, none; default
pdumper)
--with-x-toolkit=KIT use an X toolkit (KIT one of: yes or gtk, gtk2,
gtk3, lucid or athena, motif, no)
--with-wide-int prefer wide Emacs integers (typically 62-bit); on
32-bit hosts, this allows buffer and string size up
to 2GB, at the cost of 10% to 30% slowdown of Lisp
interpreter and larger memory footprint
--without-xpm don't compile with XPM image support
--without-jpeg don't compile with JPEG image support
--without-tiff don't compile with TIFF image support
--without-gif don't compile with GIF image support
--without-png don't compile with PNG image support
--without-rsvg don't compile with SVG image support
--without-lcms2 don't compile with Little CMS support
--without-libsystemd don't compile with libsystemd support
--without-cairo don't compile with Cairo drawing
--without-xml2 don't compile with XML parsing support
--with-imagemagick compile with ImageMagick image support
--without-native-image-api
don't use native image APIs (GDI+ on Windows)
--with-json compile with native JSON support
--without-xft don't use XFT for anti aliased fonts
--without-harfbuzz don't use HarfBuzz for text shaping
--without-libotf don't use libotf for OpenType font support
--without-m17n-flt don't use m17n-flt for text shaping
--without-toolkit-scroll-bars
don't use Motif/Xaw3d/GTK toolkit scroll bars
--without-xaw3d don't use Xaw3d
--without-xim at runtime, default X11 XIM to off
--without-xdbe don't use X11 double buffering support
--with-ns use Nextstep (macOS Cocoa or GNUstep) windowing
system. On by default on macOS.
--with-w32 use native MS Windows GUI in a Cygwin build
--without-gpm don't use -lgpm for mouse support on a GNU/Linux
console
--without-dbus don't compile with D-Bus support
--with-gconf compile with Gconf support (Gsettings replaces this)
--without-gsettings don't compile with GSettings support
--without-selinux don't compile with SELinux support
--without-gnutls don't use -lgnutls for SSL/TLS support
--without-zlib don't compile with zlib decompression support
--without-modules don't compile with dynamic modules support
--without-threads don't compile with elisp threading support
--with-file-notification=LIB
use a file notification library (LIB one of: yes,
inotify, kqueue, gfile, w32, no)
--with-xwidgets enable use of xwidgets in Emacs buffers (requires
gtk3 or macOS Cocoa)
--without-makeinfo don't require makeinfo for building manuals
--without-compress-install
don't compress some files (.el, .info, etc.) when
installing. Equivalent to: make GZIP_PROG= install
--with-gameuser=USER_OR_GROUP
user for shared game score files. An argument
prefixed by ':' specifies a group instead.
--with-gnustep-conf=FILENAME
name of GNUstep configuration file to use on systems
where the command 'gnustep-config' does not work;
default $GNUSTEP_CONFIG_FILE, or
/etc/GNUstep/GNUstep.conf
--with-x use the X Window System
--without-libgmp do not use the GNU Multiple Precision (GMP) library;
this is the default on systems lacking libgmp.
--without-included-regex
don't compile regex; this is the default on systems
with recent-enough versions of the GNU C Library
(use with caution on other systems).
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
PKG_CONFIG path to pkg-config utility
PKG_CONFIG_PATH
directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path
ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config
ALSA_LIBS linker flags for ALSA, overriding pkg-config
XMKMF Path to xmkmf, Makefile generator for X Window System
OBJC Objective C compiler command
OBJCFLAGS Objective C compiler flags
RSVG_CFLAGS C compiler flags for RSVG, overriding pkg-config
RSVG_LIBS linker flags for RSVG, overriding pkg-config
IMAGEMAGICK_CFLAGS
C compiler flags for IMAGEMAGICK, overriding pkg-config
IMAGEMAGICK_LIBS
linker flags for IMAGEMAGICK, overriding pkg-config
GTK_CFLAGS C compiler flags for GTK, overriding pkg-config
GTK_LIBS linker flags for GTK, overriding pkg-config
WEBKIT_CFLAGS
C compiler flags for WEBKIT, overriding pkg-config
WEBKIT_LIBS linker flags for WEBKIT, overriding pkg-config
DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
DBUS_LIBS linker flags for DBUS, overriding pkg-config
GSETTINGS_CFLAGS
C compiler flags for GSETTINGS, overriding pkg-config
GSETTINGS_LIBS
linker flags for GSETTINGS, overriding pkg-config
GCONF_CFLAGS
C compiler flags for GCONF, overriding pkg-config
GCONF_LIBS linker flags for GCONF, overriding pkg-config
GOBJECT_CFLAGS
C compiler flags for GOBJECT, overriding pkg-config
GOBJECT_LIBS
linker flags for GOBJECT, overriding pkg-config
LIBGNUTLS_CFLAGS
C compiler flags for LIBGNUTLS, overriding pkg-config
LIBGNUTLS_LIBS
linker flags for LIBGNUTLS, overriding pkg-config
LIBSYSTEMD_CFLAGS
C compiler flags for LIBSYSTEMD, overriding pkg-config
LIBSYSTEMD_LIBS
linker flags for LIBSYSTEMD, overriding pkg-config
JSON_CFLAGS C compiler flags for JSON, overriding pkg-config
JSON_LIBS linker flags for JSON, overriding pkg-config
KQUEUE_CFLAGS
C compiler flags for KQUEUE, overriding pkg-config
KQUEUE_LIBS linker flags for KQUEUE, overriding pkg-config
GFILENOTIFY_CFLAGS
C compiler flags for GFILENOTIFY, overriding pkg-config
GFILENOTIFY_LIBS
linker flags for GFILENOTIFY, overriding pkg-config
CAIRO_CFLAGS
C compiler flags for CAIRO, overriding pkg-config
CAIRO_LIBS linker flags for CAIRO, overriding pkg-config
FREETYPE_CFLAGS
C compiler flags for FREETYPE, overriding pkg-config
FREETYPE_LIBS
linker flags for FREETYPE, overriding pkg-config
FONTCONFIG_CFLAGS
C compiler flags for FONTCONFIG, overriding pkg-config
FONTCONFIG_LIBS
linker flags for FONTCONFIG, overriding pkg-config
XFT_CFLAGS C compiler flags for XFT, overriding pkg-config
XFT_LIBS linker flags for XFT, overriding pkg-config
LIBOTF_CFLAGS
C compiler flags for LIBOTF, overriding pkg-config
LIBOTF_LIBS linker flags for LIBOTF, overriding pkg-config
M17N_FLT_CFLAGS
C compiler flags for M17N_FLT, overriding pkg-config
M17N_FLT_LIBS
linker flags for M17N_FLT, overriding pkg-config
HARFBUZZ_CFLAGS
C compiler flags for HARFBUZZ, overriding pkg-config
HARFBUZZ_LIBS
linker flags for HARFBUZZ, overriding pkg-config
LCMS2_CFLAGS
C compiler flags for LCMS2, overriding pkg-config
LCMS2_LIBS linker flags for LCMS2, overriding pkg-config
PNG_CFLAGS C compiler flags for PNG, overriding pkg-config
PNG_LIBS linker flags for PNG, overriding pkg-config
XRANDR_CFLAGS
C compiler flags for XRANDR, overriding pkg-config
XRANDR_LIBS linker flags for XRANDR, overriding pkg-config
XINERAMA_CFLAGS
C compiler flags for XINERAMA, overriding pkg-config
XINERAMA_LIBS
linker flags for XINERAMA, overriding pkg-config
XFIXES_CFLAGS
C compiler flags for XFIXES, overriding pkg-config
XFIXES_LIBS linker flags for XFIXES, overriding pkg-config
LIBXML2_CFLAGS
C compiler flags for LIBXML2, overriding pkg-config
LIBXML2_LIBS
linker flags for LIBXML2, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <[email protected]>.
GNU Emacs home page: <https://www.gnu.org/software/emacs/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
私はしばしば最新のGNU emacsスナップショットに基づいてコンパイルします。私はそうしました:
'./configure' 'CC=gcc-10' 'CFLAGS=-O2 -g' '--program-suffix=-trunk' \
'--prefix=/usr/local' '--sysconfdir=/etc/local'
config.status
生成されたファイルに保存されます。
しかし、設定オプションを取得するには湾岸協力協議会早く走るgcc -v
Linuxパッケージ管理システムの研究も検討することができます。
例えばダーバン(または好みのGNU / Linuxディストリビューション)を読んで読んでください。最初からLinux。
また読んでくださいLinuxファイルシステム階層標準。
Solaris や MacOSX などの他の POSIX または Unix シリーズシステムでは、状況は次のとおりです。少しその他。
プログラムオプションを使用してオプションを渡すことを決定できます。それからまた参照これ答え。
私がコーディングしているいくつかのオープンソースプログラムでは、環境変数に関する規則も文書化しています(参照:環境(7)次のようにクエリします。環境のインポート(3)...)そして私はしばしば共通のプレフィックスを使うことにしました。だから参照システム私たちは確かにこのプロジェクト(オープンソースの象徴的な人工知能プロジェクト)を使ってREFPERSYS_
コードを書いていますgetenv("REFPERSYS_HOME")
。ビスモンド(静的分析/ソフトウェアエンジニアリングツール二輪電車そしてデコーダヨーロッパのプロジェクトを参照してくださいこのドラフトレポート)プレフィックスはBISMON_
グラフィカルユーザーインターフェースアプリケーションの場合、好むGUIフレームワーク(例:QtまたはGTK) 独自のデフォルト設定を定義します。
また、プログラムにいくつかの通訳を含めることを検討してください。
簡単に挿入できます。ルアまたはGNU ギラー(またはPython)CまたはC ++で書かれたプログラムで。これらのインタプリタには独自の規則と構文があります。いくつかの拡張既存のこれらのスクリプト言語の上級ユーザーは通訳に精通しています。
また、プラグインを使用してプログラムを拡張することも検討してください。
Linuxでは、プラグインは次のようにロードされます。ドロペン(3)そして使用してdlsym(3)C または C++ でコーディングされたプログラムで。これを受け入れる場合は、プログラムの公開APIを文書化してください。
多くの主要なLinuxプログラム(特にFirefoxブラウザブラウザとGCCコンパイラもGNUが作るまたは扱いにくい)受け入れるプラグイン。利点は、スケーラビリティが容易になり、上級ユーザーがそれをカスタマイズするために巨大なオープンソースプログラムを再コンパイルする必要がないことです。もう一つの利点はスピードです。しかし、プラグインAPIを学ぶのは途方もない努力です。