cmake - 如何为 qcc 编译器获取 cmake generate -std=c++14 标志

标签 cmake c++14 qnx

我正在尝试使用 cmake 为 QNX neutrino 交叉编译一些 C++ 库。在 CMakeLists.txt 文件中,我指定需要 CMAKE_CXX_STANDARD 14,但生成的编译器命令行不包含 -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 的代码可以很好地编译。

还使用 native 编译器(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 设置。

最佳答案

使用

set_property(TARGET ${PROJECT_NAME} PROPERTY LINKER_LANGUAGE CXX)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)

.使用它,您可以将编译器设置粘贴到目标,同时不鼓励使用全局标志,并且可以被其他 cmake 使用者覆盖。这就是我假设为什么弃用的 set(CMAKE_CXX_STANDARD 14) 没有帮助你的原因:我看不到你的完整 CMakeLists.txt 并且打赌你有很多子文件夹和其他目标,这可能会重置 CMAKE_CXX_STANDARD 他们自己。还要确保 CMake 命令的顺序。

如果需要,您可以将 ${PROJECT_NAME} 替换为 my_library

关于cmake - 如何为 qcc 编译器获取 cmake generate -std=c++14 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57607466/

相关文章:

c - 下面的c程序有什么错误?

linux - dlclose : "shared objects still referenced" 错误

android - 在 Windows 上为 Android 设置 Dlib

c++ - CMake 外壳查找

bash - 在我的 Ubuntu 安装中,VERBOSE 环境变量在哪里以及为什么设置为 "no"?

cmake - CMake:添加一个外部项目,但从目标 “all”中排除

c++ - 在 C++ 中读取非文本文件

c++ - 为什么 getenv() 返回一个非常量字符串

c++ - 从命名空间获取具有相同签名的函数并在 C++ 中迭代它们

linux - 获取远程 SSH session 的 PID [QNX]?