对于使用vcpkg安装的软件包,我很难找到要在cmake文件中使用的正确“库目标名称”。
例如,我使用gtest
安装了vcpkg install gtest
软件包。我的示例cmake文件如下所示:
#CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(example)
add_executable(main main.cpp)
find_package(gtest REQUIRED)
target_link_libraries(main gtest) # here, "gtest" is not the right name!
运行cmake
时,生成了Visual Studio解决方案,但是运行cmake --build .
后,出现错误:
../use-cmake-vcpkg\main.cpp(1): fatal error C1083: Cannot open include file: 'gtest/gtest.h': No such file or directory ..
最后一行:target_link_libraries(main gtest)
不正确,我需要使用另一个“名称”来包含/链接gtest软件包。
有没有办法(使用cmake或vcpkg)找出要使用的正确目标名称? (在这种情况下适用于gtest,还适用于其他任何功能)
答案 0 :(得分:1)
使用n = int(input())
names = {}
for foo in range(n):
entry = input().split(' ')
names[entry[0]] = entry[1]
while True: # (1 == 1) == True
try:
check = input()
except EOFError: # catch the error
break # exit the loop
if(names.get(check)!=None):
print(check + '=' + names.get(check))
else:
print('Not Found')
时,它可以在两种模式下工作: MODULE 和 CONFIG 。以及此调用的结果变量和目标取决于模式。
如果find_package(XXX)
文件存在(并且可以找到),则使用 MODULE 模式并处理给定的文件。否则,如果软件包随附FindXXX.cmake
文件,则使用 CONFIG 模式并处理给定的文件。如果此文件都不存在,则CMake会发出错误(如果使用 REQUIRED 关键字调用)或警告(没有 REQUIRED 关键字)。
对于XXXConfig.cmake
软件包,CMake附带了gtest
脚本,因此该脚本以 MODULE 模式处理。您可以在documentation中找到此脚本的描述,该脚本表明您需要使用FindXXX.cmake
目标与gtest链接:
GTest::GTest