在Linux上从源代码进行简单安装

时间:2016-04-13 21:16:37

标签: c++ c linux installation

我正在尝试找出安装C和C ++代码的简化方法 和它们构建的库,主要用于Linux。我认为 GNU Autotools,CMake等对我正在尝试做的事情来说太过分了。

一个例子:我写了一些代码,当'make'运行时,构建到 创建一个库'example.a'。 (到目前为止,我将使用静态链接。 共享图书馆将引入更多问题;我走路之前会爬行。)使用这些功能需要包括'example1.h','example2.h'等。

使用Autotools,可以运行'make install'或'sudo make install' 将example.a复制到/ usr / local / lib并将包含文件复制到/ usr / local / include。 如果已构建可执行文件,则会将这些文件复制到/ usr / local / bin。

我已尝试将以下行添加到我的makefile中:

安装:
    cp example.a / usr / local / lib
    cp example1.h / usr / local / include
    cp example2.h / usr / local / include
    cp示例/ usr / local / bin

这似乎很有效。其他项目则可以“看到” .h文件并正确构建。但找不到.a文件;唯一的 让它被链接的方法是明确地给出路径 /usr/local/lib/example.a。 (虽然gcc坚称它正在寻找图书馆 在那条路上。)所以:

问题1:我的用户构建的库是否应该放在/ usr / local / lib中?或者是 我使用了错误的目录?

现在,我的下一个问题是:必须使用'sudo make install'来完成。 我认为对于这种类型的一些项目,只有一个用户会 利用有问题的代码,图书馆应该去某个地方 比如$ HOME / lib,包含文件到$ HOME / include,可执行文件到 $ HOME / bin中。

问题2:是否有“标准”方法来安装包含/库 只是当前用户,而不是为所有用户这样做? (从而避免 根本使用的需要,我认为如果只是,它将是一个“更清洁”的系统 使用该程序的用户必须处理这些文件。)

1 个答案:

答案 0 :(得分:1)

您应该使用install来使用显式权限进行复制。 example.a可能没有找到,因为它不是以lib开头的(我知道这是一个愚蠢的要求)。

libincludebin置于$HOME/。local下可能是最符合每用户标准设置的内容。

修改

我刚测试了它,/usr/local/lib对我来说很好用:

<强> foo.c的

#include <stdio.h>
void foo() { puts("foo"); }

编译并安装:

gcc -c foo.c
ar crs libfoo.a foo.o
install -m 0755 /usr/local/lib #0644 should do too

在另一个目录中:

<强>的main.c

void foo(void);
int main() { foo(); return 0; }

编译,链接和运行:

gcc main.c -lfoo 
./a.out