【发布时间】:2018-07-14 22:59:09
【问题描述】:
虽然this duplicate 是一个非常相似的问题,但它早于我所询问的方法(“导入的对象库”),它是在 3.9.6 版 ~1 年前添加到 Cmake 中的(?)因此那里的答案都没有解决这个问题。
我刚刚开始使用 cmake,我正试图或多或少地从 makefile 中复制这种行为:
foo: foo.cpp bar.o
$(CXX) $^ -o $@
bar.o:
cp $(EXTERNAL_DIR)/bar.o .
所以bar.o 只是从外部复制进来的。它没有被构建,等等。然后它被编译到foo目标中。
In the Cmake documentation 这看起来很简单;导入 .o 文件:
add_library(bar OBJECT IMPORTED GLOBAL)
set_property(TARGET bar PROPERTY IMPORTED_LOCATION ${EXTERNAL_DIR}/bar.o)
并使用它:
add_executable(foo $<TARGET_OBJECTS:bar> foo.cpp)
但是当构建运行时,我得到了所有应该在bar.o 中的东西的缺失符号——并且运行冗长,原因很清楚:Cmake 从不将它用于任何事情。在编译器调用中没有提到它,并且在构建目录中没有提到它,在任何生成的 makefile 中也没有提到它。
此外,我可以将IMPORTED_LOCATION 更改为不存在的东西,它并不在乎。它的运行方式完全相同。
我在这里误解了什么?我如何完成这项工作(无需向EXTERNAL_DIR 添加任何内容)?
【问题讨论】: