CMake的。不正常的行为

时间:2016-05-20 16:08:31

标签: c++ cmake

让我们考虑两个简化的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'

为什么?

1 个答案:

答案 0 :(得分:2)

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

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

至于为什么失败是一个如此奇怪的消息,我怀疑错过了在CMake的部分逃脱(虽然你的路径会有一个带有尾随空格的目录名,这可能不会发生在实践)。