选项来包含目录
CMAKE option to include a directory
我试图在基于ARM-linux的系统上编译OPENCV。为此,我创建了一个工具链cmake文件,其中包含以下选项
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命令后,我得到以下错误:
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选项包括这个文件夹。我该怎么做呢?
您可以通过include_directories
命令:
include_directories(SYSTEM /usr/local/arm/4.3.1-eabi-armv6/usr/include)
一个更健壮的解决方案是在这个路径中搜索头文件,如果找到了包含该目录,否则失败。除了比在CMakeLists.txt中硬编码本地路径更健壮之外,另一个好处是它在CMake运行时失败,而不是在以后的构建时失败。这最好使用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_SYSROOT来解决这个问题。看起来你应该把它设置为
/usr/local/arm/4.3.1-eabi-armv6/
http://www.cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html交叉编译
您可以将CMAKE_INCLUDE_PATH
设置为环境变量,有关格式的说明请参见CMAKE文档:
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- Win32编译器选项和内存分配
- 以现代 CMake 方式控制包含的库中的构建选项(测试等)
- 如何将cacert.pem与vs2015 curl项目一起包含,因此无需指定Cainfo curl选项
- boost::p rogram_option::store 在选项字符串包含混合语言字符时引发异常
- 为什么 g++ -MM 选项忽略当前工作目录的包含文件
- 阻止 GCC 在包含搜索路径上搜索当前目录"-I-"选项
- 如何设置 windows 文件打开对话框筛选器以包含"必须完成"选项
- 是否有用于打印源文件直接包含的标题的 GCC 选项
- #定义硬件游标的包含选项
- 我可以在位掩码中包含多少选项?
- 读取包含选项卡的文件
- c++包含使用代码或命令行选项的框架
- 选项来包含目录
- 如果我包含"-ansi"编译器选项,为什么我的 C++0x 代码无法编译?
- C/ c++:为使用automake的间接包含自动添加-I选项