Compilation 如何在Ubuntu上安装自己的应用程序

Compilation 如何在Ubuntu上安装自己的应用程序,compilation,makefile,installation,Compilation,Makefile,Installation,我在我的Windows机器上创建了一个应用程序,现在我想在我的Linux机器上安装它。它有几个头文件和源文件,所以我认为最好把它上传到Github上。我这样做了,还创建了一个Makefile,但是当我尝试直接从文件夹安装它时,会出现很多错误 鉴于它只供个人使用,有没有办法手动编译每个文件,然后作为一个整体运行 生成文件: .PHONY: all debug profile install uninstall clean all: $(PROG) $(PROG): $(FILES) $

我在我的Windows机器上创建了一个应用程序,现在我想在我的Linux机器上安装它。它有几个头文件和源文件,所以我认为最好把它上传到Github上。我这样做了,还创建了一个Makefile,但是当我尝试直接从文件夹安装它时,会出现很多错误

鉴于它只供个人使用,有没有办法手动编译每个文件,然后作为一个整体运行

生成文件:

.PHONY: all debug profile install uninstall clean

all: $(PROG)

$(PROG): $(FILES)
    $(CC) $(CCFLAGS) -o $(PROG) $(FILES) $(LIBS)

debug: $(FILES)
    $(CC) $(DEBUGFLAGS) -o $(PROG) $(FILES) $(LIBS)

profile: $(FILES)
    $(CC) $(CCFLAGS) -pg -o $(PROG) $(FILES) $(LIBS)

install: $(PROG)
    cp -f $(PROG) /usr/sbin/
    cp -f $(PROG).1 /usr/man/man1/ || cp -f $(PROG).1 /usr/local/man/man1/

uninstall:
    rm -f /usr/sbin/$(PROG)
    rm -f /usr/man/man1/$(PROG).1 || rm -f /usr/local/man/man1/$(PROG).1

clean:
    rm -f $(PROG)

虽然您的基本方法很好,但是您缺少一些细节,并且您正在打破一些基于某种原因而建立的惯例

详情:

  • 不包括您对
    $(PROG)
    $(文件)
    $(LIBS)
    的定义
  • 您试图将文件复制到目录,但不确保其存在。通常使用
    install
    实用程序而不是
    cp
    来处理此类内容
公约:

  • 您似乎没有仅在必要时才使用
    root
    权限。以普通用户身份编译;仅以root用户身份运行
    makeinstall
    ,例如使用
    sudo
    ;或者更好的是,避免这样做
  • 您正试图将文件放入包管理系统安装文件的
    /usr/bin/
    /usr/man
    中,因此可能会混淆它。不要。如果您需要让系统上的所有用户都可以使用第三方软件(如您自己的),只需安装到
    /usr/local/
    /opt
    ,它们都是为此而存在的。相应地调整
    $PATH
    $MANPATH
    。如果只是供您个人使用,您可以安装到
    $HOME
    下的目录中
  • 将要安装的顶级目标目录设置为
    Makefile
    中的变量。它通常被称为
    $(DESTDIR)

GitHub与安装无关,它只是一个存储代码的地方。你能给出代码和makefile的一部分,并展开“很多错误”吗?makefile的问题在于:
cp-f$(PROG)/usr/sbin/cp-f$(PROG).1/usr/man/man1/| | cp-f$(PROG).1/usr/local/man/man1/
,而错误是“没有这样的文件或目录”。我试图自己解决它,但失败了。此外,我没有提供可验证的代码示例,因为我要求提供一个替代方案,而不是代码检查。但是,如果代码是必需的,我将添加它。@jornsharpe我添加了makefile的一部分。希望有帮助。在“没有这样的文件或目录”之前的错误消息是什么?cp:无法创建常规文件“usr/man/man1”:没有这样的文件或目录