CMake的对象输出文件夹变量

Ebr*_*owi 6 cmake

如何"$ {PROJECT_BINARY_DIR} /CMakeFiles/project.dir/",编译产生的地方对象文件将被放置,可以是非硬编码的吗?

直接针对这个问题,我们有一些测试检查对象是由harfbuzz cmake上的编译产生的,我们在那里使用了一个硬编码的字符串,但这似乎不对,我希望有一些$ {}或$ <>.

Rei*_*ica 3

恐怕你在这里运气不好。CMake 通过设计将其保留为内部实现细节。

我想说它不太可能改变,但如果你想绝对面向未来,你可以使用一种解决方法,从对象文件中创建一个静态库,然后手动将其解压回对象文件中(使用适当的归档器/图书馆员)作为测试的一部分。如果目标文件也被另一个目标使用,并且链接到该静态库对于该目标不起作用,则可以从文件中创建一个对象库,然后在原始目标和用于测试的静态中使用它图书馆。

以下是如何实现此解决方法的示例:

add_library(MyObjectLib OBJECT src/a.cpp src/b.cpp)

add_executable(Main src/main.cpp $<TARGET_OBJECTS:MyObjectLib>)

add_library(LibForTesting STATIC $<TARGET_OBJECTS:MyObjectLib>)

add_test(
  NAME check-static-inits.sh
  COMMAND ${PROJECT_SOURCE_DIR}/src/prepare-and-check-static-inits.sh $<TARGET_FILE:LibForTesting>
)
Run Code Online (Sandbox Code Playgroud)

脚本如下prepare-and-check-static-inits.sh所示(伪代码):

ar -x $1 -o some_dir
./check-static-inits.sh some_dir
Run Code Online (Sandbox Code Playgroud)