【问题标题】:Can GCC ignore nonexisting directories?GCC 可以忽略不存在的目录吗?
【发布时间】:2019-12-12 15:52:03
【问题描述】:

我有两个项目:mylib 和 myproj mylib 编译成一个共享对象。 myproj 使用 mylib。 我使用以下链接 myproj:

g++ -L../../mylib/Release myproj.o -lmylib

这在我的开发机器上运行良好。

在另一台机器上,mylib.so 位于 /usr/local/lib。因此不需要-L。 没有 -L 也能正常编译。

但是,一旦我使用相同的命令(使用 -L)编译它,它就会响应

g++:错误:../../mylib/Release:没有这样的文件或目录

我希望 myproj 在两台机器上使用相同的命令进行编译。 有没有办法让它忽略不存在的目录?

它似乎并不关心完整路径是否不存在,它只抱怨相对路径。

【问题讨论】:

  • 你在另一台机器上使用的是什么 g++ 版本?我以这个命令为例:g++ -L../../foo/bar main.o -lpthread,即使 foo/bar 目录不存在,它也可以正确链接

标签: gcc linker g++


【解决方案1】:

您希望尽可能多地使用 Makefile,因为它们使事情变得更容易。在定义的 Makefile 中,您可以先检查目录。可能是这样的:

all: 
   if [ -d "mylib" ]; then 
       g++ -L../../mylib/Release myproj.o -lmylib
   else
       g++  myproj.o -lmylib
   fi

当然你可以使用CC等变量。这只是一个基本的例子。

【讨论】:

  • 在 Makefile 中,配方的每一行都在其自己的子 shell 中单独执行。如果要使用多行 shell 命令,则需要使用 `\` 行继续符将命令变成一个逻辑行。
猜你喜欢
  • 2011-03-07
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多