这是我的配置的编译器部分:
IF(UNIX)
## Compiler flags
# specify the cross compiler
SET(CMAKE_C_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc)
SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++)
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-O3")
set(CMAKE_EXE_LINKER_FLAGS "-lsqlite3 -lrt -lpthread")
endif()
target_link_libraries(complex
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY})
ENDIF(UNIX)
有3个问题:-lsqlite3 -lrt -lpthread
我必须如何为我的架构制作它们并在此处指定?在我以某种方式为我的架构重新编译它们之后,如何设置(使用 set?)编译库的路径?
如果您想使用 CMake 进行交叉编译,您确实应该使用工具链文件。请参阅CMake 维基 http://www.cmake.org/Wiki/CMake_Cross_Compiling进行介绍。为了使用第三方库(即不包含在交叉编译工具链中),您也需要交叉编译它们。
Edit:由于您使用的是buildroot工具链,因此您可以使用已经包含的CMake工具链文件。只要通过-DCMAKE_TOOLCHAIN_FILE=/home/username/projects/buildroot/output/toolchainfile.cmake
调用 CMake 时。无需设置CMAKE_C_COMPILER
and CMAKE_CXX_COMPILER
在你的CMakeLists.txt
文件。另外,设置CMAKE_CXX_FLAGS
and CMAKE_EXE_LINKER_FLAGS
被认为是非常糟糕的做法。
想必您在构建 buildroot 工具链时已经构建了 sqlite3,因此您可以像任何其他库一样使用它。 IE:
find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
find_library(SQLITE3_LIBRARY sqlite3)
if(NOT SQLITE3_INCLUDE_DIR)
message(SEND_ERROR "Failed to find sqlite3.h")
endif()
if(NOT SQLITE3_LIBRARY)
message(SEND_ERROR "Failed to find the sqlite3 library")
endif()
find_package(Threads REQUIRED)
# ...
target_link_libraries(complex
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${SQLITE3_LIBRARY}
${CMAKE_THREAD_LIBS_INIT}
rt)
最后不要设置CMAKE_CXX_FLAGS
to -O3
。用户应该通过-DCMAKE_BUILD_TYPE=Release
配置项目时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)