c++ - Cmake:如何选择 C++ header

标签 c++ linux gcc cmake clang

我想在 gccclang 之间做出选择,也想在 libstdc++libc++ 之间做出选择。 This site解释了如何混合编译器和标准库。我可以通过调用 cmake 来选择编译器,例如 CC=gcc CCX=g++ cmake... 或使用 CC=clang...

问题是对于 libstdc++ 我需要使用标志 -I/usr/include/c++/5 而对于 libc++ -I/usr/include/c++/v1.

出于可移植性原因,我不想在 CMakeListst.txt 中包含上述路径,也不想将其作为命令行参数。有没有办法做到这一点并让 cmake 自动检测它?

最佳答案

也许您已经知道这一点,find_package boost 或 openssl 也会看到某些环境变量,例如 BOOST_ROOTOPENSSL_ROOT_DIR。所以你也需要这样的提示变量。

cpprestsdk cmake script ,

我认为你的 CMakeLists.txt

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  message("-- Setting clang option")
  include_directories(${Your_path})
  ...

elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  message("-- Setting gcc options")
  include_directories(${Your_path})

  ...

else()
  message("-- Unknown compiler, success is doubtful.")
  message("CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
endif()

关于c++ - Cmake:如何选择 C++ header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055022/

相关文章:

c - const 说明符在 cast 中的必要性

linux - 与 gcc 5 的 OCCI 链接错误

c - 汇编可以工作,但 shellcode 不能

c++ - 如何使用 Win32/MFC API 提取 .iso 文件?

c++ - cudaMemCpy2D() 的堆内存上具有连续行的二维数组

linux - 如何按第三列中的数字对数据进行排序?

linux - 如何检索系统中正在使用的端口?

java - 如何使用 dbus-java 注册 dbus 对象?

c++ - 是否有解决方法可以在 C++ 中为 Shorts 定义用户定义的文字?

c++ - 将窄 (char) 输入流重新解释为宽 (wchar_t) 流