我想在项目中使用获取googletest
的{{3}}。但似乎有些不对劲:
ninja: error: 'libsuper/test/googletest-prefix/src/googletest-build/googlemock/gtest/libgtest.a', needed by 'libdsuper/test/libsuper_test', missing and no known rule to make it
据我了解错误,当忍者试图构建测试可执行文件时,没有可用的gtest库。因此,我在测试目标之后添加了一个依赖项:
add_executable(${PROJECT_NAME}_test ${SOURCES})
add_dependencies(${PROJECT_NAME}_test ${GTEST_LIBRARY})
但这没有效果。它的接缝就像它被默默地忽略了一样。我想这是因为IMPORTED
适用于不需要编译的系统库,因此从一开始就可以使用。就我而言,这不是真的。 googletest
库仅在ExternalProject_Add
编译后才可用。
这是否也与ninja
相关联?上面链接的网站没有提到问题 - 我可以想象这是因为googletest
和libSomeOtherThingThatUsesGTest
按顺序构建,正如make
所做的那样。
如何指示cmake等到gtest
库真正可用?
答案 0 :(得分:2)
依赖 IMPORTED 库目标有一点意义 - 没有操作与这样的目标绑定,所以实际上你什么都不依赖。
相反,您应该依赖目标,这会创建库。对于外部项目,这是为此类项目创建的目标(while (pa2 < &frase[size]) {
++pa2;
*pa1 = *pa2;
pa1++;
}
frase.resize(size - 1 - (pa2 - pa1));
cout << "La frase dopo l'eliminazione è: " << frase << '\n';
函数调用的第一个参数)。
如果正常(非 IMPORTED )库目标情况完全不同:创建此类库的操作与目标本身绑定,因此依赖于库目标意味着库应该是在dependee之前建造。但很少使用这种依赖:相反,一个链接与库目标,这本身就暗示了与该目标绑定的动作的依赖。
答案 1 :(得分:0)
对于googletest你应该使用:
add_executable(${PROJECT_NAME}_test ${SOURCES})
target_link_directories(${PROJECT_NAME}_test gtest)
将自动管理依赖关系。 此外,导入的目标gtest已根据this
依赖于googletest ExternalProject_Add我猜错误来自于导入的目标文件位置${binary_dir}/googlemock/gtest/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a
的路径错误恕我直言。