让我们考虑两个简化的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的转义部分(尽管您的路径中会有一个带有尾随空格的目录名称,实际上在实践中可能不会出现)。