2013-12-11 119 views
0

我想在我的Ubuntu机器上使用cmake编译我的CLang独立应用程序,但没有运气。这里是我的CMakeLists.txt: -g ++编译CLang独立应用程序,但CMake不是

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 

现在,当我运行做内搭目录,它给我: -

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。如果有人知道发生了什么事情?

谢谢

+0

编译失败,因为创建正确的makefile失败。由于'cmake'失败,创建正确的makefile失败。并且'cmake'失败,因为在库列表中留有空白(注意最后一个库和结束报价之间的那些换行符)。 –

+0

@JoachimPileborg感谢您的快速回复。你能告诉我如何删除那个换行符吗?或者,也许我正在使用一些过时的方式来设置链接库。 –

+1

检查[execute_process的文档](http://www.cmake.org/cmake/help/v2.8.12/cmake.html#command:execute_process)。我确信有一些选择可能会有所帮助。 ;) –

回答

0

我建议你使用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

+0

我可以,但它不像这些额外的文件将使它与平台无关,因为我们在'/ opt/local/bin'内搜索'llvm-config'可执行文件,因此只能在linux上工作(或者可能在Mac OS上X)。那么,为什么不保持简单?我没有看到任何其他好处。 –

+0

当然,但你可以从这些文件中看到如何使用llvm-config的输出,不是吗? – milianw