You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Makefile.am在Unity Build中单独编译链接foo.cpp

在Makefile.am中单独编译并链接排除在Unity Build外的文件

你当前的配置已经把foo.cpp从Unity Build的源列表中排除,但没有将它作为单独的源文件加入到项目编译流程中,导致链接时找不到foo.cpp对应的符号。只需在UNITY_BUILD的条件块中显式添加foo.cpp到项目源文件列表即可解决:

修改后的Makefile.am片段:

if UNITY_BUILD

# 将foo.cpp作为独立编译单元加入项目
my_project_SOURCES += foo.cpp
nodist_my_project_SOURCES = unity.cpp
UNITY_SRC = $(filter-out foo.cpp,$(TEST_SRCS))

unity.cpp: Makefile.am
    echo "/* This file is automatically generated; do not edit.     */" > $@
    echo "/* Add the files to be included into Makefile.am instead. */" >> $@
    echo >> $@
    for i in $(UNITY_SRC); do \
        echo "#include \"test-suite/$$i\"" >> $@; \
    done

.PHONY: benchmark
benchmark: my_project$(EXEEXT)
    BOOST_TEST_LOG_LEVEL=message ./my_project$(EXEEXT)
endif

说明

  • my_project_SOURCES += foo.cpp 会让Automake将foo.cpp作为单独的编译单元处理,编译成独立的目标文件后,和unity.cpp生成的目标文件一起链接到最终的my_project可执行文件中,补上缺失的符号。
  • 保留UNITY_SRC = $(filter-out foo.cpp,$(TEST_SRCS))确保foo.cpp不会被包含到自动生成的unity.cpp中,完全对应CMake里SKIP_UNITY_BUILD_INCLUSION的效果。

内容的提问来源于stack exchange,提问作者Siddharth Mehrotra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:33:19