我已经开始了一个针对C++的linux项目。我在想.那个应该放在哪里。他们是否应该进入项目文件夹中,这样用户在获得程序后就可以简单地运行它?或者,用户在运行我的程序之前,是否应该在linux机器上安装SFML库?
发布于 2010-09-21 01:37:12
即使您包含了.so
文件,也不能保证用户能够运行它(不同的体系结构,链接到不同libc的库,等等)。无论是静态链接,还是让它们自己提供支持库都更好。
@JoelJ.Adamson对使用autoconf
的回答是个好主意。SFML没有附带pkg-config
文件,因此您将按如下方式检查SFML:
dnl Checking for a C++ compiler
AC_PROG_CXX
dnl Checking C++ features. This tells configure to use the C++ compiler for checks.
AC_LANG_PUSH([C++])
dnl Check for a SFML header.
AC_CHECK_HEADER([SFML/Config.hpp], [], [AC_MSG_ERROR([SFML headers not found.])])
AC_LANG_POP([C++])
由于名称混乱等原因,检查库变得有点困难。Tyler McHenry在这一部分写了一个good article,如果你想彻底的话。
发布于 2010-09-20 20:10:12
在发行版级别,SFML将是一个依赖项,即用户在编译您的程序之前必须安装它(或者他们的包管理器必须安装它)。如果用户想要编译它,他们还需要头文件(通常需要安装一个单独的"devel“包)。您不应该分发.so
文件,而且(对每个人来说)不分发可能更好。
您需要检查用户是否拥有它,例如,使用autoconf时,您需要在应用程序项目的configure.ac
中检查相关的头文件。例如,要检查数学库,因为我使用的是exp()
函数,所以我将使用
AC_CHECK_LIB([m], [exp])
若要在configure
步骤中创建检查,请执行以下操作。幸运的是,autoscan
可以为您检查这一点,并创建名为configure.scan
的框架configure.ac
文件。另请参见Cmake。
HTH。
发布于 2010-09-20 20:14:57
你应该让你的程序依赖于它所需要的特定库(和版本)。如果你计划将它打包到rpm/deb文件中,你也应该在那里添加依赖项,以便包管理器可以检查和应用它(例如,apt可以安装给定包的所有依赖项包)
https://stackoverflow.com/questions/3754853
复制