g++ 编译另一个目录中存在的源文件

2024-01-10

我正在尝试使用 makefile 为我正在开发的 C++ 插件设置构建过程。我很好奇是否有任何方法可以让 g++ 编译source在另一个目录中找到的文件。我这样做的动机是避免为每个源文件指定相对路径,正如我在下面解释的那样。

我的项目目录结构如下:

MyPlugin --> src   --> Foo.cpp
                   --> Foo.h
                   --> Bar.cpp
                   --> Bar.cpp
         --> build --> Makefile

以下是我当前 Makefile 的精简版本:

SRC_PATH=../src
OUT_PATH=../bin
VPATH=${SRC_PATH}
FILES=Foo.cpp Bar.cpp

CC=g++
CFLAGS=-Wall -shared

all:
    mkdir -p ${OUT_PATH}
    ${CC} ${CFLAGS} -I${SRC_PATH} ${FILES} -o ${OUT_PATH}/MyPlugin.so

通过这样做,我试图避免定义FILES变量如下:

FILES=../src/Foo.cpp ../src/Bar.cpp

当我尝试跑步时make all, g++ 给了我一个错误。看起来像通过指定的路径-Iflag仅用于搜索#included files.

g++: Foo.cpp: No such file or directory
g++: Bar.cpp: No such file or directory

我不能使用通配符(*.cpp)因为我并不总是希望选取所有文件进行编译。另一种选择是cd到 src 目录,如上所述here https://stackoverflow.com/questions/1139271/makefiles-with-source-files-in-different-directories,然后从那里运行 g++,但这仅适用于所有文件都位于同一目录中的情况(我需要输出是单个.so文件)。我也尝试设置环境变量PATH,但这似乎没有任何效果。

我查看了 g++ 帮助、make 文档,并查看了 StackOverflow 帖子,例如https://stackoverflow.com/questions/10010741/g-compile-with-codes-of-base-class-in-a-separate-directory https://stackoverflow.com/questions/10010741/g-compile-with-codes-of-base-class-in-a-separate-directory and gcc/g++:“没有这样的文件或目录” https://stackoverflow.com/questions/12919081/gcc-g-no-such-file-or-directory,但找不到任何我可以使用的解决方案。您能否建议我解决这个问题的合适方法?

Edit该示例可能具有误导性。在这个精简的示例中,我将所有源文件都放在一个目录中,但在我的实际项目中,我有几个子目录,每个目录中有多个文件。因此,虽然cd正在向src目录在我上面的示例中有效,但在我的实际项目中不起作用(或者至少,我想知道它是如何工作的)。


你可以有第二个变量actual源文件,像这样:

FILES = Foo.cpp Bar.cpp
SOURCES = $(FILES:%.cpp=$(SRC_PATH)/%.cpp)

然后而不是使用FILES构建时使用SOURCES.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

g++ 编译另一个目录中存在的源文件 的相关文章

随机推荐

  • 如何让Intellij Idea Coverage显示全彩色线条?

    在 Eclipse 中 大多数覆盖插件都用不同的颜色显示覆盖 部分覆盖 未覆盖的线 即整条线涂上颜色 在 IntelliJ Idea 中 我还找不到用描述性颜色绘制整条线的方法 仅在左侧添加了一个几乎难以察觉的小标记 使得部分覆盖 未覆盖的
  • CakePHP:无法识别 hasMany 关联

    尝试属于用户 用户有很多尝试 在 User php 模型 中 public hasMany array Attempt gt array className gt Attempt order gt modified DESC 在Attemp
  • 如何激活每个项目并解析它们的信息?

    我在使用 python 抓取网页时遇到了不同类型的问题 单击图像时 有关其风味的新信息会出现在图像下方 我的目标是解析与每个图像相关的所有风味 我的脚本可以解析当前活动图像的风格 但在单击新图像后会中断 我的循环中的一点点抽动就会引导我走向
  • 我可以在 JOIN 条件中使用 CASE 语句吗?

    下图是 Microsoft SQL Server 2008 R2 系统视图的一部分 从图中我们可以看出 之间的关系sys partitions and sys allocation units取决于的值sys allocation unit
  • 使用属性字符串突出显示 NSStatusItem

    我有一个 NSStatusItem 我为其使用属性字符串 设置如下 statusItem setAttributedTitle as where as是我的属性字符串 当满足某些条件时 我用它通过不同的颜色来突出显示项目的某些部分 例如 我
  • 如何从消费者更新提供者中的上下文值? [复制]

    这个问题在这里已经有答案了 MyContext js import React from react const MyContext React createContext test export default MyContext 我在一
  • 在 MATLAB 中组合两个结构体的有效方法有哪些?

    我想组合两个具有不同字段名称的结构 例如 从以下内容开始 A field1 1 A field2 a B field3 2 B field4 b 我想拥有 C field1 1 C field2 a C field3 2 C field4
  • 如何在 Android 中将音频 raw 转换为 flac

    我用 audoiRecord 类录制音频 现在我想将音频原始文件转换为 flac 格式 我接下来将 raw 文件转换为 wav private void copyWaveFile String inFilename String outFi
  • 即使已启用,也未为 iOS 启用 API

    我已将地点自动完成或地点 API 与地图 Google 登录和 Firebase RealtimeDatabase 集成 但是当我运行该应用程序时 错误提示 操作无法完成 iOS 版 Places API 未启用 请参阅开发人员指南 htt
  • 如何检查android中用户是否清除了缓存?

    我正在开发的应用程序应该知道用户 android 是否已清除缓存或清除数据 以便我注销用户 这个怎么做 如何判断用户是否清除了缓存 Android操作系统可以自行清除应用程序的缓存 无需人工干预 吗 使用 SharedPreferences
  • Android/ListView:加载数据后选择第一项

    EDIT我必须告诉你 我的 ListView 是由 AsyncTask 填充的 当我在 onPostExecute 方法中执行以下操作时 下面的代码工作正常 synchronized mListView if mFeeds null mFe
  • 如何将新数据追加到已有的配置单元表

    如何将记录追加到现有的分区 Hive 表中 例如 我有一个名为 ip country 的现有外部表 数据集是 testdata1 如果数据集增长 比如我第二天的数据集是 testdata1 和 testdata2 那么如何将新数据 即 te
  • 从文件异步加载图像

    我在本地存储中有一个相对图像 我想在不干扰 UI 线程的情况下将其显示给用户 我目前正在使用 UIImage alloc initWithContentsOfFile path 加载图像 任何建议 帮助请 如果您想要做的只是保持 UI 线程
  • 使预处理器跟踪定义的来源

    在一大堆复杂的源代码中 不是这里发明的 是由 Elbonian 代码奴隶拼凑在一起的 可能会出现这样的情况 几位代码在其路径中拥有一些公共头文件的本地副本 由于构建和使用的层数较多保护宏 https gcc gnu org onlinedo
  • PHP。为什么日期对象的月份差异在 12 个月后重置为 0?

    今天是 2015 年 7 月 8 日 当我运行以下命令时它返回0 如果不返回12 日期是12个月前 同样如果 date 2014 06 03 它返回1 难道不是吗13 过去 12 个月内的所有日期均已正确计算 date 2014 07 03
  • wwwroot 之外的 Elmah logPath

    我们正在尝试部署我们的项目 但我们无法让 elmah 在 wwwroot 之外创建 xml 日志 它当前正在记录到 inetpub site wwwroot App Data 因为这是唯一可行的路径 我们希望将其记录到我们的 inetpub
  • Java:使用引用游标作为 OUT 调用存储过程时结果集为空

    我试图从 Java 调用存储过程 但返回的结果始终是false 实际上 它必须返回 100 条记录 连接建立良好 我有一个存储过程 PROCEDURE get records grp1 IN a name TYPE DEFAULT NULL
  • 使用 PHP 将带有换行符的字符串分解为 HTML 段落

    我从 MySQL 数据库获取文本 该文本被分成行 段落 它存储在变量中 post data content 如何使其打印时带有换行符 我当前使用的代码 post data content explode n post data conten
  • 退出 Putty 后如何保持 Spring Boot 应用程序处于活动状态

    我正在通过命令使用 putty 在我的服务器上运行我的 spring boot 应用程序 mvn spring boot run 仅当我打开 ssh 会话时才运行 断开会话后是否可以使应用程序保持活动状态 或者我是否必须制作可执行的 war
  • g++ 编译另一个目录中存在的源文件

    我正在尝试使用 makefile 为我正在开发的 C 插件设置构建过程 我很好奇是否有任何方法可以让 g 编译source在另一个目录中找到的文件 我这样做的动机是避免为每个源文件指定相对路径 正如我在下面解释的那样 我的项目目录结构如下