【发布时间】:2019-12-27 16:01:24
【问题描述】:
我正在尝试使用 cmake 为 QNX neutrino 交叉编译一些 c++ 库。在 CMakeLists.txt 文件中,我指定了 CMAKE_CXX_STANDARD 14 required,但生成的编译器命令行不包含 -std=c++14 选项。
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
我尝试过使用目标编译功能:
target_compile_features(my_library PRIVATE cxx_std_14)
但这给了我以下错误:
CMake Error at CMakeLists.txt:53 (target_compile_features):
target_compile_features no known features for CXX compiler
"QCC"
version 5.4.0.
当我使用 check_cxx_compiler_flag 功能时,它似乎可以识别该选项:
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-std=c++14 CXX14_SUPPORT)
if(CXX14_SUPPORT)
message("c++14 support found")
else()
message("c++14 unsupported")
endif()
这会输出消息
c++14 support found
手动运行 qcc 它接受 -std=c++14 选项就好了,使用 std::make_unique 的代码编译就好了。
还使用本机编译器(Ubuntu 18.04,gcc),cmake 生成的 makefile 一切正常。 make VERBOSE=1 显示以下命令行(我删除了一些目录):
/usr/local/bin/c++ -Dshm_transfer_EXPORTS -I... -fPIC -std=gnu++14 -o CMakeFiles/shm_transfer.dir/src/SharedMemoryTransfer.cpp.o -c .../SharedMemoryTransfer.cpp
相对于使用 qcc 工具链的命令行:
.../qnx700/host/linux/x86_64/usr/bin/qcc -lang-c++ -Vgcc_ntox86_64 -lang-c++ -Dshm_transfer_EXPORTS -I... -fPIC -o CMakeFiles/shm_transfer.dir/src/SharedMemoryTransfer.cpp.o -c .../SharedMemoryTransfer.cpp
我希望 cmake 命令能够识别 qcc 支持 -std=c++14 选项并由于 CMAKE_CXX_STANDARD 设置而生成相应的命令行。
【问题讨论】: