如何正确设置Windows路径以便CMake轻松识别?

时间:2017-04-28 11:35:31

标签: c++ c windows cmake

我在Windows 10 64位上第1703页。最近我想从头开始构建Tesseract-OCR库用于学习目的。在此过程中,我必须构建其他几个库,将它们放入一个文件夹中并命名为#34; myLibrary" (C:/ myLibrary)并将其设置在Windows路径变量中。即使其他图书馆建立成功,我仍然难以找到图书馆,即使在C:/ myLibrary'在路上。是否每次添加新库时都必须修改特定项目的CMakeLists.txt文件以查看库?或者可以假设CMake具有查找库的功能,只要它们在路径中?仅仅设置' C:/ myLibrary'在路径中或我应该添加' bin'和' lib' CMake可以找到每个编译库的文件夹吗?

1 个答案:

答案 0 :(得分:0)

Windows PATH无法帮助您检测CMake中的库。如果它甚至可以工作,那么它不是设计的,可能非常容易出错。在CMake中,手动通过target_link_libraries(${TARGET} PRIVATE "${LIB_PATH}/foo.lib" "${LIB_PATH}/baz.lib" "${ANOTHER_LIB_PATH}/buzz.lib" ... } 添加库的最佳方式。 e.g。

GLOB

对于路径中的库,您也可以GLOB,但不鼓励这样做,因为您需要手动重新运行CMake以获取任何新库。 file(GLOB LIBS "${LIB_PATH}/lib*.dll") target_link_libraries(${TARGET} PRIVATE ${LIBS}) 无法自行检测新图书馆,但假设您不介意:

set

要记住的另一个重要事项是,您不应该依赖系统指定的CMake路径,您需要在target_link_libraries之前使用set(LIB_PATH "C:/myLibrary") 指定位置,例如

function testWrite():void {
    var fileRef:FileReference;
    var txt:String;
    var fr:int;

    txt = "";

    // 'Head' is the name one of MovieClips
    for (fr = 0; fr < 4; fr++) {
        txt += "frame: " + currentFrame + ", " + Head.x + "\n";
        nextFrame();
        Head.nextFrame();
    }

    fileRef = new FileReference();
    fileRef.save(txt, "testExport.txt");
}
testWrite();