C++ CMAKE 谓词没有这样的文件
C++ CMAKE Predicate no such file
首先,错误日志:
-- Boost version: 1.59.0
-- Success!
-- Could NOT find Freetype (missing: FREETYPE_LIBRARY) (found version "2.6.3")
-- LOADING OS --Windows--
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/Gianluca/.CLion2016.2/system/cmake/generated/mcdu-57fe38f9/57fe38f9/Debug
[ 1%] Automatic moc for target untitled
[ 1%] Built target untitled_automoc
[ 2%] Building CXX object CMakeFiles/untitled.dir/main.cpp.obj
[ 3%] Building CXX object CMakeFiles/untitled.dir/mainwindow.cpp.obj
[ 4%] Building CXX object CMakeFiles/untitled.dir/gldisplay.cpp.obj
[ 7%] Building CXX object CMakeFiles/untitled.dir/svg/svg.cpp.obj
[ 7%] Building CXX object CMakeFiles/untitled.dir/svg/svgfont.cpp.obj
[ 8%] Building CXX object CMakeFiles/untitled.dir/svg/svgstring.cpp.obj
[ 11%] Building CXX object CMakeFiles/untitled.dir/ht1000scriptmanager.cpp.obj
[ 11%] Building CXX object CMakeFiles/untitled.dir/ht1000widgetfactory.cpp.obj
CMakeFilesuntitled.dirbuild.make:149: recipe for target 'CMakeFiles/untitled.dir/svg/svg.cpp.obj' failed
In file included from C:WorkPolitecProductionsmcdusvgsvg.cpp:1:0:
C:WorkPolitecProductionsmcdusvgsvg.h:14:48: fatal error: boost/algorithm/string/predicate.hpp: No such file or directory
#include <boost/algorithm/string/predicate.hpp>
^
compilation terminated.
In file included from C:WorkPolitecProductionsmcdusvgsvgstring.cpp:3:0:
C:WorkPolitecProductionsmcdusvg./svg.h:14:48: fatal error: boost/algorithm/string/predicate.hpp: No such file or directory
#include <boost/algorithm/string/predicate.hpp>
^
compilation terminated.
mingw32-make.exe[2]: *** [CMakeFiles/untitled.dir/svg/svg.cpp.obj] Error 1
mingw32-make.exe[2]: *** Waiting for unfinished jobs....
In file included from C:WorkPolitecProductionsmcdusvgsvgfont.cpp:2:0:
C:WorkPolitecProductionsmcdusvg./svg.h:14:48: fatal error: boost/algorithm/string/predicate.hpp: No such file or directory
#include <boost/algorithm/string/predicate.hpp>
^
compilation terminated.
CMakeFilesuntitled.dirbuild.make:199: recipe for target 'CMakeFiles/untitled.dir/svg/svgstring.cpp.obj' failed
mingw32-make.exe[2]: *** [CMakeFiles/untitled.dir/svg/svgstring.cpp.obj] Error 1
CMakeFilesuntitled.dirbuild.make:174: recipe for target 'CMakeFiles/untitled.dir/svg/svgfont.cpp.obj' failed
mingw32-make.exe[2]: *** [CMakeFiles/untitled.dir/svg/svgfont.cpp.obj] Error 1
CMakeFilesuntitled.dirbuild.make:249: recipe for target 'CMakeFiles/untitled.dir/ht1000widgetfactory.cpp.obj' failed
In file included from C:WorkPolitecProductionsmcduht1000widgetfactory.cpp:1:0:
C:WorkPolitecProductionsmcdu./ht1000widgetfactory.h:5:25: fatal error: QScriptEngine: No such file or directory
#include <QScriptEngine>
^
compilation terminated.
更多 http://pastebin.com/72ySYdVd
这是我的实际CMakeList。
cmake_minimum_required(VERSION 3.6)
project(mcdu)
#### Boost Check Version
find_package(Boost REQUIRED)
if(Boost_FOUND)
message(STATUS "Success!")
endif()
#### Qt5
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Script REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(FREETYPE)
set(QT_LIBRARIES Qt5::Widgets Qt5::Core Qt5::OpenGL Qt5::Core Qt5::Script)
set( CMAKE_AUTOMOC ON )
ADD_DEFINITIONS(${QT_DEFINITIONS})
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage ")
add_definitions("-std=c++11")
# Find includes in corresponding build directories
include_directories(
${BOOST}
${FREETYPE}
${Qt5Widgets_INCLUDE_DIRS}
-lopengl32 -lglu32 -luser32
)
if (WIN32)
message(STATUS "LOADING OS --Windows--")
include_directories(
${BOOST}/lib32-msvc-14.0 -libboost_timer-vc140-mt-gd-1_59 -libboost_log-vc140-mt-gd-1_59 -libboost_log_setup-vc140-mt-gd-1_59
${FREETYPE}/objs/vc2010/Win32/ -lfreetype263d
)
endif ()
#Source Files
set(SOURCE_FILES
src files. Cut to be short
#Header Files
set(HEADER_FILES
header files. Cut to be short
)
#Add Forms
QT5_WRAP_UI(FORM_FILES
.ui files
)
add_executable(untitled ${SOURCE_FILES} ${HEADER_FILES} ${FORM_FILES})
更多 http://pastebin.com/uGf3SHUn
因此,在 svg.h 下,包含如下: #include <boost/algorithm/string/predicate.hpp>
我已经MSVC2015和 BOOST + FREETYPE 环境变量被添加到系统和 Clion。如果我从QT构建它,我只会得到predicate.hpp错误。
这是QT PRO文件
QT += core gui script opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = mcdu
TEMPLATE = app
DEFINES += WIN
DEFINES += OGLFT_NO_SOLID
DEFINES += OGLFT_NO_QT
DEFINES += TEST
INCLUDEPATH += $$(BOOST)
INCLUDEPATH += $$(FREETYPE)/include
INCLUDEPATH += status
INCLUDEPATH += systems
INCLUDEPATH += svg
INCLUDEPATH += displays
CONFIG += debug
win32 {
DEFINES += WINDOWS
LIBS += -lopengl32 -lglu32 -luser32
LIBS += -L$$(BOOST)/lib32-msvc-14.0 -libboost_timer-vc140-mt-gd-1_59 -libboost_log-vc140-mt-gd-1_59 -libboost_log_setup-vc140-mt-gd-1_59
LIBS += -L$$(FREETYPE)/objs/vc2010/Win32/ -lfreetype263d
}
linux {
message("Build for Linux")
DEFINES += LINUX
DEFINES += BOOST_LOG_DYN_LINK
LIBS += -lGLU
LIBS += -lfreetype
LIBS += -L/home/RINF/rogosz/source/boost_1_59_0/stage/lib -lboost_timer -lboost_log -lboost_log_setup -lboost_system -lboost_thread -lboost_filesystem
}
SOURCES += src files: cut to be short
HEADERS += header files. cut to be short
FORMS += form files. cut to be short
find_package(Boost REQUIRED)
# ...
# Find includes in corresponding build directories
include_directories(
${BOOST}
${FREETYPE}
${Qt5Widgets_INCLUDE_DIRS}
-lopengl32 -lglu32 -luser32
)
由包含 Boost 头文件路径的 find_package( Boost ... )
设置的变量命名为 Boost_INCLUDE_DIRS
,而不是 BOOST
。
除非 FREETYPE 打破了模式,否则也应该FREETYPE_INCLUDE_DIRS
。
链接器指令(-lopengl32 -lglu32 -luser32
(在那里做什么?
if (WIN32)
message(STATUS "LOADING OS --Windows--")
include_directories(
${BOOST}/lib32-msvc-14.0 -libboost_timer-vc140-mt-gd-1_59 -libboost_log-vc140-mt-gd-1_59 -libboost_log_setup-vc140-mt-gd-1_59
${FREETYPE}/objs/vc2010/Win32/ -lfreetype263d
)
endif ()
我很困惑。这到底是为了达到什么目的?您使用命令include_directories()
,但看起来好像您正在尝试在此处提供链接器说明?添加链接依赖项是通过target_link_libraries()
...
即使你使用正确的命令,你也不会给出链接器指令(-lfreetype263d
(,而是列出链接目标,最好是由各种find_package()
调用提供的目标,即 ${Boost_LIBRARIES}
(不是${BOOST}
(,${FREETYPE_LIBRARIES}
(不是${FREETYPE}
(。
进一步:
set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage ")
add_definitions("-std=c++11")
这些是特定于编译器的选项,如果您正在使用 Visual Studio,它们不会使您的船漂浮。使用 if ( MSVC )
和 if ( CMAKE_COMPILER_IS_GNUCC )
检查您正在使用的编译器。
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 现代CMake(3.8+)-FindCUDA已弃用,非.cu文件呢
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- MinGw 无法从 cmake 编译测试文件
- cmake:添加要搜索头文件的目录
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- CMake:在其他目录中找不到我的头文件
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 无法使用 CMake 从其他文件夹添加源文件
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 使用 Cmake 在 Qt Creator 中显示头文件
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 告诉CMake链接到自定义文件夹中的Boost
- Vcpkg Pango CMake 构建失败缺少头文件
- 从不同的文件cmake调用类