我有
ExternalProjectAdd(googletest ......)
...
add_library(gtest_main UNKNOWN IMPORTED)
set_target_properties(gtest_main PROPERTIES
"IMPORTED_LOCATION" ${binary_dir}/googlemock/gtest/libgtest_main.a
)
...
add_executable(sometest somefile.cpp)
target_link_library(sometest gtest_main)
add_dependencies(sometest googletest)
Run Code Online (Sandbox Code Playgroud)
但显然说明可执行文件的依赖sometest
上googletest
实际上并不需要ExternalProject_Add
的build命令之前,为构建命令来调用sometest
。
如果我运行ninja
,它会抱怨它找不到libgtest_main.a
. 但是如果你调用ninja googletest && ninja sometest
它就可以了。
那么,您如何判断cmake
这sometest
取决于googletest
调用的构建命令?
正如评论中提到的,该问题与Ninja生成器及其扫描依赖项的机制有关(更多详细信息)。
为了解决这个问题,需要添加额外的Cmake选项BUILD_BYPRODUCTS以及将要编译的库的预期路径:
ExternalProject_add(
...
BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/googlemock/gtest/libgtest_main.a
)
Run Code Online (Sandbox Code Playgroud)
这应该有助于消除这样的错误:
ninja:错误:'gtest/libgtest_main.a','sometest.so'需要,缺少并且没有已知的规则来制作它
我知道这个答案已经很晚了,但希望它能帮助某人安全几个小时。
归档时间: |
|
查看次数: |
939 次 |
最近记录: |