CMAKE选项包括一个目录 [英] CMAKE option to include a directory
问题描述
am试图在基于ARM-linux的系统上编译OPENCV.为此,我创建了一个带有以下选项的工具链cmake文件
am trying to compile OPENCV on ARM-linux based system. For this purpose I created a toolchain cmake file with the following options
SET (CMAKE_SYSTEM_NAME Linux)
SET (CMAKE_SYSTEM_VERSION 1)
SET (CMAKE_SYSTEM_PROCESSOR arm)
SET (CMAKE_C_COMPILER "/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc")
SET (CMAKE_CXX_COMPILER "/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-g++")
SET (CMAKE_FIND_ROOT_PATH "/usr/local/arm/4.3.1-eabi-armv6/")
SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET (LIBRARY_OUTPUT_PATH "/home/xxx/OpenCV-2.4.3/lib")
SET (OPENCV_CONFIG_FILE_INCLUDE_DIR "/home/xxx/OpenCV-2.4.3")
SET (OPENCV_WARNINGS_ARE_ERRORS OFF)
运行cmake命令和make命令后,出现以下错误:
After running the cmake command and make command I am getting the following error:
In file included from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/bits/postypes.h:47,
from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/iosfwd:47,
from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/ios:44,
from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/ostream:45,
from /usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/iostream:45,
from /home/zwang/OpenCV-2.4.3/3rdparty/openexr/Half/half.h:88,
from /home/zwang/OpenCV-2.4.3/3rdparty/openexr/Half/half.cpp:48:
/usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache/../lib/gcc/arm-samsung-linux-gnueabi/4.3.1/../../../../arm-samsung-linux-gnueabi/include/c++/4.3.1/cwchar:52:24: error: wchar.h: No such file or directory
总结:编译器无法找到wchar.h,stdio.h,wctype.h,ctype.h.这些标头位于/usr/local/arm/4.3.1-eabi-armv6/usr/include中.我想我需要使用cmake选项包括此文件夹.我怎样才能做到这一点?
Summarizing : the compiler is not able to find wchar.h, stdio.h, wctype.h, ctype.h. These headers are present in /usr/local/arm/4.3.1-eabi-armv6/usr/include . I guess I need to include this folder using cmake options. How can I do that?
推荐答案
You can do this via the include_directories
command:
include_directories(SYSTEM /usr/local/arm/4.3.1-eabi-armv6/usr/include)
更可靠的解决方案是在此路径中搜索标头,如果找到,则包含目录,否则将失败.除了比将本地路径硬编码到CMakeLists.txt中更强大之外,另一个好处是它在CMake运行时而不是以后的构建时失败.最好使用 find_path
完成.
A more robust solution would be to search for a header in this path, and if found include the directory, or else fail. As well as being more robust than hard-coding a local path into your CMakeLists.txt, another benefit is that it fails at CMake run time, rather than at build time later on. This is best done using find_path
.
例如,您可以这样做:
find_path(WcharPath wchar.h PATHS /usr/local/arm/4.3.1-eabi-armv6/usr/include)
if(WcharPath)
include_directories(SYSTEM ${WcharPath})
else()
message(FATAL_ERROR "Failed to find wchar.h")
endif()
这篇关于CMAKE选项包括一个目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!