如何"$ {PROJECT_BINARY_DIR} /CMakeFiles/project.dir/",编译产生的地方对象文件将被放置,可以是非硬编码的吗?
直接针对这个问题,我们有一些测试检查对象是由harfbuzz cmake上的编译产生的,我们在那里使用了一个硬编码的字符串,但这似乎不对,我希望有一些$ {}或$ <>.
恐怕你在这里运气不好。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)
| 归档时间: |
|
| 查看次数: |
1227 次 |
| 最近记录: |