cmake的环境变量设置

开源代码编译一般都使用两种,

一种是大部分通过autoconf的configure进行生成,这种可以通过configure --help了解可以通过配置哪些参数调整编译的细节

另外一种是CMakeFile,而这种通过没有configure。不过,可以通过cmake自身的语法来进行配置。

首先是CMAKE_TOOLCHAIN_FILE,  交叉编译都需要设置这项,cmake -DCMAKE_TOOLCHAIN_FILE=aarch64.cmake, aarch64.cmake参考内容如下,主要是设置CXX对应的路径

DCMAKE_INSTALL_PREFIX可以设置install路径

# This is required. target system name
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)

# this one not so much
#SET(CMAKE_SYSTEM_VERSION 7)

# specify the cross compiler
#SET(CMAKE_C_COMPILER $ENV{TOOLCHAIN_ROOT}/aarch64-unknown-nto-qnx7.0.0-gcc-5.4.0)
#SET(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_ROOT}/aarch64-unknown-nto-qnx7.0.0-g++-5.4.0)
SET(TOOLCHAIN_PATH /work/new_os/toolchains/aarch64--glibc--stable)
SET(CMAKE_SYSROOT ${TOOLCHAIN_PATH}/aarch64-buildroot-linux-gnu/sysroot)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/aarch64-linux-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/aarch64-linux-g++)

#SET(CMAKE_C_COMPILER $ENV{QNX_HOST}/usr/bin/qcc)
#SET(CMAKE_CXX_COMPILER $ENV{QNX_HOST}/usr/bin/qcc)

#SET(CMAKE_C_COMPILER_TARGET gcc_ntoaarch64le)
#SET(CMAKE_CXX_COMPILER_TARGET gcc_ntoaarch64le)

# where is the target environment
#SET(CMAKE_FIND_ROOT_PATH /work/ipu03/svs-qnx-nda/qnx700/target/qnx7/)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# configure Boost and Qt
#SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
#SET(BOOST_ROOT /opt/boost_arm)

# OPENSSL_FOUND OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES
#SET(OPENSSL_ROOT_DIR /work/usr/openssl)
#SET(OPENSSL_USE_STATIC_LIBS TRUE)

对于CMakefile其他配置项,可以参考CMakefile是否存在,这类配置项都可以通过 cmake -D<Variable>=<Value>"进行设置。

# Set of indiviual options
option(BUILD_SHARED_LIBS "Set to OFF to build static libraries" ON)
option(WITH_SYSTEMD "Set to ON to create unit files and systemd check on dlt-daemon startup" OFF)
option(WITH_SYSTEMD_WATCHDOG "Set to ON to use the systemd watchdog in dlt-daemon" OFF)
option(WITH_SYSTEMD_JOURNAL "Set to ON to use the systemd journal in dlt-system" OFF)
option(WITH_DOC "Set to ON to build documentation target" OFF)

 

linux:

linux.aarch64.cmake
# This is required. target system name
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)

# this one not so much
#SET(CMAKE_SYSTEM_VERSION 7)

# specify the cross compiler
#SET(CMAKE_C_COMPILER $ENV{TOOLCHAIN_ROOT}/aarch64-unknown-nto-qnx7.0.0-gcc-5.4.0)
#SET(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_ROOT}/aarch64-unknown-nto-qnx7.0.0-g++-5.4.0)
SET(TOOLCHAIN_PATH /work/toolchains/aarch64--glibc--stable-1)
SET(CMAKE_SYSROOT ${TOOLCHAIN_PATH}/aarch64-buildroot-linux-gnu/sysroot)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/aarch64-linux-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/aarch64-linux-g++)

#SET(CMAKE_C_COMPILER $ENV{QNX_HOST}/usr/bin/qcc)
#SET(CMAKE_CXX_COMPILER $ENV{QNX_HOST}/usr/bin/qcc)

#SET(CMAKE_C_COMPILER_TARGET gcc_ntoaarch64le)
#SET(CMAKE_CXX_COMPILER_TARGET gcc_ntoaarch64le)

# where is the target environment
#SET(CMAKE_FIND_ROOT_PATH /work/qnx7/)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# configure Boost and Qt
#SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
#SET(BOOST_ROOT /opt/boost_arm)

# OPENSSL_FOUND OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES
#SET(OPENSSL_ROOT_DIR /work/usr/openssl)
#SET(OPENSSL_USE_STATIC_LIBS TRUE)

 

QNX:

qnx.ntoaarch64le.cmake
# This is required. target system name
SET(CMAKE_SYSTEM_NAME QNX)

# this one not so much
SET(CMAKE_SYSTEM_VERSION 7)

# specify the cross compiler
#SET(CMAKE_C_COMPILER $ENV{TOOLCHAIN_ROOT}/aarch64-unknown-nto-qnx7.0.0-gcc-5.4.0)
#SET(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_ROOT}/aarch64-unknown-nto-qnx7.0.0-g++-5.4.0)
SET(CMAKE_C_COMPILER $ENV{QNX_HOST}/usr/bin/qcc)
SET(CMAKE_CXX_COMPILER $ENV{QNX_HOST}/usr/bin/qcc)
set(CMAKE_C_COMPILER_TARGET gcc_ntoaarch64le)
set(CMAKE_CXX_COMPILER_TARGET gcc_ntoaarch64le)

# where is the target environment
#SET(CMAKE_FIND_ROOT_PATH /work/sdk/qnx7/)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# configure Boost and Qt
#SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
#SET(BOOST_ROOT /opt/boost_arm)

# OPENSSL_FOUND OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES
#SET(OPENSSL_ROOT_DIR /work/usr/openssl)
#SET(OPENSSL_USE_STATIC_LIBS TRUE)

 

CMakeList.txt

CMakeLists.txt
# cmakelist for Project
cmake_minimum_required(VERSION 3.8.2)
# 0. Choise toolchain file
include(linux.aarch64.cmake)
#include(qnx.ntoaarch64le.cmake)

# 1. Project Name
project(xxx)

# 2. Project Env (Include/Lib Path, C/CXX/LD FLAGS)
#define flag
#ADD_DEFINITIONS(-DDEBUG)

# 3. Build
#include
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")

#source
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src DIR_SRCS)
#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src/subdir DIR_SRCS)

set(BIN_SRC_FILES ${DIR_SRCS})
add_executable(${PROJECT_NAME} ${BIN_SRC_FILES})
#add_library(${LIB_NAME} SHARED ${LIB_SRC_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)

if (${CMAKE_SYSTEM_NAME} MATCHES "QNX")
set(LIBS socket)
#add_definitions(-DQNX)
else()
set(LIBS pthread)
#add_definitions(-DLINUX)
endif()

#library
target_link_libraries(${PROJECT_NAME}
${LIBS}
z
)

# 4. Install
#install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

 

posted @ 2021-10-22 14:15  sciapex  阅读(5094)  评论(0编辑  收藏  举报