【问题标题】:g++ compiling CLang standalone app but CMake isn'tg++ 编译 CLang 独立应用程序,但 CMake 不是
【发布时间】:2013-12-11 06:47:24
【问题描述】:

我正在尝试在我的 Ubuntu 机器上使用 cmake 编译我的 CLang 独立应用程序,但还没有成功。这是我的CMakeLists.txt:-

cmake_minimum_required(VERSION 2.8)

project(Demo)

execute_process(
    COMMAND llvm-config --cxxflags
    OUTPUT_VARIABLE LLVM_CXX_FLAGS
)

execute_process(
    COMMAND llvm-config --ldflags
    OUTPUT_VARIABLE LLVM_LD_FLAGS
)

execute_process(
    COMMAND llvm-config --libs
    OUTPUT_VARIABLE LLVM_LIB_FLAGS
)

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LLVM_CXX_FLAGS}")
SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} ${LLVM_LD_FLAGS}")

add_executable(clangTestApp TestCLang.cpp)

target_link_libraries(clangTestApp ${LLVM_LIB_FLAGS})

这是我从项目目录中的构建目录运行cmake .. 时的输出:-

-- Configuring done
CMake Error at CMakeLists.txt:23 (add_executable):
  Target "clangTestApp" links to item "-lLLVMAsmParser -lLLVMInstrumentation
  -lLLVMLinker -lLLVMArchive -lLLVMBitReader -lLLVMDebugInfo -lLLVMJIT
  -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMTableGen
  -lLLVMHexagonCodeGen -lLLVMHexagonDesc -lLLVMHexagonInfo
  -lLLVMHexagonAsmPrinter -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo
  -lLLVMNVPTXAsmPrinter -lLLVMMBlazeAsmParser -lLLVMMBlazeDisassembler
  -lLLVMMBlazeCodeGen -lLLVMMBlazeDesc -lLLVMMBlazeInfo
  -lLLVMMBlazeAsmPrinter -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo
  -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info
  -lLLVMMSP430AsmPrinter -lLLVMXCoreCodeGen -lLLVMXCoreDesc -lLLVMXCoreInfo
  -lLLVMCellSPUCodeGen -lLLVMCellSPUDesc -lLLVMCellSPUInfo
  -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser -lLLVMMipsDesc
  -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMARMDisassembler
  -lLLVMARMAsmParser -lLLVMARMCodeGen -lLLVMARMDesc -lLLVMARMInfo
  -lLLVMARMAsmPrinter -lLLVMPowerPCCodeGen -lLLVMPowerPCDesc
  -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter -lLLVMSparcCodeGen
  -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMX86Disassembler -lLLVMX86AsmParser
  -lLLVMX86CodeGen -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter
  -lLLVMX86Utils -lLLVMR600CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter
  -lLLVMR600Desc -lLLVMR600Info -lLLVMR600AsmPrinter -lLLVMMCDisassembler
  -lLLVMMCParser -lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts
  -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMMCJIT
  -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject
  -lLLVMCore -lLLVMSupport

  " which has leading or trailing whitespace.  This is now an error according
  to policy CMP0004.


-- Generating done
-- Build files have been written to: /home/prakhar/Desktop/CLang/Demo/build

现在,当我在构建目录中运行 make 时,它​​给了我:-

Scanning dependencies of target clangTestApp
[100%] Building CXX object CMakeFiles/clangTestApp.dir/TestCLang.o
Linking CXX executable clangTestApp
c++: fatal error: no input files
compilation terminated.
make[2]: *** [clangTestApp] Error 4
make[1]: *** [CMakeFiles/clangTestApp.dir/all] Error 2
make: *** [all] Error 2

我不知道为什么 c++ 会说no input files。如果有人知道发生了什么?

谢谢

【问题讨论】:

  • 编译失败,因为创建正确的 makefile 失败。由于cmake 失败,因此无法创建正确的makefile。 cmake 失败,因为库列表中的尾随空格(注意最后一个库和结束引号之间的那些换行符?)。
  • @JoachimPileborg 感谢您的快速回复。你能告诉我如何删除那个换行符吗?或者,也许我正在使用一些过时的方式来设置链接库。
  • 检查documentation for execute_process。我敢肯定有一些选择可能会有所帮助。 ;)
  • OUTPUT_STRIP_TRAILING_WHITESPACE 是选项。谢谢。

标签: c++ cmake clang


【解决方案1】:

我建议您使用可以找到的 FindClang.cmake,例如这里:https://github.com/woboq/woboq_codebrowser/blob/master/cmake/modules/FindClang.cmake(或者只是谷歌查找 FindClang.cmake)。您还需要相应的 FindLLVM.cmake (https://github.com/woboq/woboq_codebrowser/blob/master/cmake/modules/FindLLVM.cmake)

【讨论】:

  • 我可以,但它不像这些额外的文件会使它独立于平台,因为我们在 /opt/local/bin 中搜索 llvm-config 可执行文件,因此只能在 linux 上工作(或者可能在 Mac OS 上) X 也是如此)。那么,为什么不保持简单呢?我没有看到任何其他好处。
  • 当然可以,但是您也可以从这些文件中看到如何使用 llvm-config 的输出,不是吗?
猜你喜欢
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多