让我们考虑两个简化的CMakeLists.txt

set(GTEST "/usr/local/lib/libgtest.a")
set(GMOCK "/usr/local/lib/libgmock.a")
...
target_link_libraries(project  ${GTEST} ${GMOCK})


当我cmake然后make时,它可以工作。但是,以下操作无效:

set(GTEST "/usr/local/lib/libgtest.a  /usr/local/lib/libgmock.a")
...
target_link_libraries(project  ${GTEST})


当我放cmake时,它可以正常工作。但是当我把它放给我时:

make[3]: *** There is no rule for '/usr/local/lib/libgtest.a /usr/local/lib/libgmock.a'


为什么?

最佳答案

这两个例子并不意味着同一件事。第一个示例将两个库传递给target_link_libraries。第二个传递一个库名称,其中包含两个空格。如果要在一个变量中传递两个库,请使用

set(GTEST "/usr/local/lib/libgtest.a" "/usr/local/lib/libgmock.a")


至于失败为何如此奇怪的消息,我怀疑是缺少CMake的转义部分(尽管您的路径中会有一个带有尾随空格的目录名称,实际上在实践中可能不会出现)。

10-06 05:08
查看更多