Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何正确设置Windows路径以便于CMake识别?_C++_C_Windows_Cmake - Fatal编程技术网

C++ 如何正确设置Windows路径以便于CMake识别?

C++ 如何正确设置Windows路径以便于CMake识别?,c++,c,windows,cmake,C++,C,Windows,Cmake,我使用的是Windows 10 64位verson 1703。最近,为了学习,我想从头开始构建Tesseract OCR库。在此过程中,我不得不构建其他几个库,将它们放在一个文件夹中,并将其命名为“myLibrary”(C:/myLibrary),然后在Windows path变量中进行设置。尽管其他库构建成功,但即使“C:/myLibrary”在路径中,我仍然很难找到这些库。是否每次添加新库时,都必须修改特定项目的CMakeLists.txt文件才能查看库?或者可以假设CMake具有查找库的功

我使用的是Windows 10 64位verson 1703。最近,为了学习,我想从头开始构建Tesseract OCR库。在此过程中,我不得不构建其他几个库,将它们放在一个文件夹中,并将其命名为“myLibrary”(C:/myLibrary),然后在Windows path变量中进行设置。尽管其他库构建成功,但即使“C:/myLibrary”在路径中,我仍然很难找到这些库。是否每次添加新库时,都必须修改特定项目的CMakeLists.txt文件才能查看库?或者可以假设CMake具有查找库的功能,只要库在路径中就可以了?仅在路径中设置“C:/myLibrary”就足够了吗?还是应该添加每个编译库的“bin”和“lib”文件夹,以便CMake找到它们?

Windows路径不会帮助您检测CMake中的库。如果这真的行得通的话,它不是设计出来的,可能很容易出错。在CMake中,通过
LIST
手动添加库的最佳方法。e、 g

target_link_libraries(${TARGET} PRIVATE
    "${LIB_PATH}/foo.lib"
    "${LIB_PATH}/baz.lib"
    "${ANOTHER_LIB_PATH}/buzz.lib"
    ...
}
您也可以对路径中的库执行
GLOB
,但不鼓励这样做,因为您需要手动重新运行CMake以获取任何新库
GLOB
无法单独检测新库,但假设您不介意:

file(GLOB LIBS "${LIB_PATH}/lib*.dll")
target_link_libraries(${TARGET} PRIVATE ${LIBS})
另一个需要记住的重要事项是,您不应该依赖于CMake的系统指定路径,您需要在
target\u link\u库之前使用
set
指定位置,例如

set(LIB_PATH "C:/myLibrary")

我认为它没有挖掘“bin”和“lib”文件夹的智能,因为不是每个项目都使用相同的约定。您需要显式地添加这些。在我看来,如果在代码库中使用
PATH
变量,则是错误的。仅供参考
PATH
环境变量用于查找不包含和libs的可执行文件(exe、bat等)。