让我们考虑两个简化的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'
为什么?
答案 0 :(得分:2)
这两个例子并不意味着同样的事情。第一个示例将两个库传递给target_link_libraries
。第二个传递一个库名称,其中包含两个空格。如果要在一个变量中传递两个库,请使用
set(GTEST "/usr/local/lib/libgtest.a" "/usr/local/lib/libgmock.a")
至于为什么失败是一个如此奇怪的消息,我怀疑错过了在CMake的部分逃脱(虽然你的路径会有一个带有尾随空格的目录名,这可能不会发生在实践)。