我正在尝试构建一个小型的C++/Qt测试程序,用于读取各种编码的文件,并尝试使用Google的Compact Encoding Detection(CED)库:https://github.com/google/compact_enc_det。虽然有很多类似的问题,但是它们似乎都无法解决我的问题。
CED作为独立项目可以成功构建,但我无法将其作为外部库并入我的项目中。我习惯于使用QMake,在QtCreator中工作,但是这只适用于CMake,因此我开始四处寻找,但有点迷失了方向(在这方面,QMake似乎更简单)。
我设法让我的C++/Qt项目在QtCreator下使用CMake正常工作,并且还成功构建和测试了CED(然后CMake生成一个库:libced.a)。
以下是我的小型(可行的)CMakeLists文件:
我不会粘贴CED的CMakeLists,它有点长,可以在GitHub页面上找到:https://github.com/google/compact_enc_det/blob/master/CMakeLists.txt 我想要使用CED作为静态库(但我尝试了许多方法,都无法成功),或者将源代码合并到我的项目中,需要时进行编译(我已尝试将CED作为外部项目链接到我的源树之外,但如果更容易,我可以将其移动到同一源树中)。
我尝试过一种有前途的方法:
但是我遇到了一个“
我唯一成功的方法是从Google创建的CED项目开始,并将我的源代码粘贴在那里,让CED的CMakeLists为我的程序生成额外的可执行文件,但这与我想要的代码和项目结构相反。
如果我试着反过来做(将CED包含在我的项目中),我总是会遇到CED源代码和包含文件路径问题。
有人能告诉我这种情况的最佳实践是什么吗? 另外,如我所说,我新手上路CMake,希望能提供一个简洁的解决方案。 我使用的是Debian Stretch操作系统。
CED作为独立项目可以成功构建,但我无法将其作为外部库并入我的项目中。我习惯于使用QMake,在QtCreator中工作,但是这只适用于CMake,因此我开始四处寻找,但有点迷失了方向(在这方面,QMake似乎更简单)。
我设法让我的C++/Qt项目在QtCreator下使用CMake正常工作,并且还成功构建和测试了CED(然后CMake生成一个库:libced.a)。
以下是我的小型(可行的)CMakeLists文件:
cmake_minimum_required(VERSION 3.1.0)
project(FileTestCMakeCED)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
set(FileTest_src
${CMAKE_CURRENT_LIST_DIR}/src/mainwindow.cpp
${CMAKE_CURRENT_LIST_DIR}/src/main.cpp
)
add_executable(${PROJECT_NAME} ${FileTest_src})
# Use the Widgets module from Qt 5
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
我不会粘贴CED的CMakeLists,它有点长,可以在GitHub页面上找到:https://github.com/google/compact_enc_det/blob/master/CMakeLists.txt 我想要使用CED作为静态库(但我尝试了许多方法,都无法成功),或者将源代码合并到我的项目中,需要时进行编译(我已尝试将CED作为外部项目链接到我的源树之外,但如果更容易,我可以将其移动到同一源树中)。
我尝试过一种有前途的方法:
include_directories(../compact_enc_det)
add_library(ced STATIC IMPORTED)
set_target_properties(ced PROPERTIES IMPORTED_LOCATION ../compact_enc_det/lib/libced.a)
...
target_link_libraries(${PROJECT_NAME} Qt5::Widgets ced)
但是我遇到了一个“
no rule to make target .../libced.a
”的错误,尽管我只想使用预编译库。我唯一成功的方法是从Google创建的CED项目开始,并将我的源代码粘贴在那里,让CED的CMakeLists为我的程序生成额外的可执行文件,但这与我想要的代码和项目结构相反。
如果我试着反过来做(将CED包含在我的项目中),我总是会遇到CED源代码和包含文件路径问题。
有人能告诉我这种情况的最佳实践是什么吗? 另外,如我所说,我新手上路CMake,希望能提供一个简洁的解决方案。 我使用的是Debian Stretch操作系统。
find_library()
代码片段中修改了两个小错误:STREQUAL
(而不是STREQUALS
)和endif()
(而不是end()
)。 我使用这段代码使其正常工作,然后添加了以下行以进行包含:include_directories(${CMAKE_CURRENT_LIST_DIR}/compact_enc_det)
。 - LLL