[CMake] Re-executing CMake from the Makefile.

Brad King brad.king at kitware.com
Thu Aug 14 17:43:35 EDT 2008


Óscar Fuentes wrote:
> The script examines library interdependencies dumping the symbol
> definitions and references they contain. For this, you need to build the
> libraries first. Later on the build, the executables just provide names
> of components, the script maps this names to actual libraries and
> returns the full list of needed libraries on the correct order for using
> it on the link command.
> 
> If you know an elegant way to handle this with CMake, I'll like to hear
> it.
> 
> BTW, this is for the Low Level Virtual Machine (LLVM) www.llvm.org

I assume you're refering to this script:

  http://llvm.org/svn/llvm-project/llvm/trunk/utils/GenLibDeps.pl

It seems to rely on certain output from "nm".  Does this work with any
windows compilers?  Inferring dependencies among already-built static
libraries is not a design goal for CMake as it tries not to depend on
any low-level details of native tools.  However, given an explicit
list of static libs and their *direct* dependencies, CMake will chain
them automatically and handle the circular cases.

I think in the long run LLVM should just explicitly declare its
dependencies.  They can't be *that* complicated.  See below for
output I got from building llvm.  Would it really be so bad to
list that by hand?  It's 18 lines that could be distributed
throughout each library's build files.  The executables already
list their direct dependencies explicitly.

-Brad

libLLVMAnalysis.a: libLLVMCore.a libLLVMSupport.a libLLVMSystem.a libLLVMTarget.a
libLLVMArchive.a: libLLVMBitReader.a libLLVMCore.a libLLVMSupport.a libLLVMSystem.a
libLLVMAsmParser.a: libLLVMCore.a libLLVMSupport.a
libLLVMBitReader.a: libLLVMCore.a libLLVMSupport.a
libLLVMBitWriter.a: libLLVMCore.a libLLVMSupport.a
libLLVMCodeGen.a: libLLVMCore.a libLLVMScalarOpts.a libLLVMSupport.a libLLVMSystem.a libLLVMTarget.a libLLVMTransformUtils.a
libLLVMCore.a: libLLVMSupport.a
libLLVMDebugger.a: libLLVMBitReader.a libLLVMCore.a libLLVMSupport.a libLLVMSystem.a
libLLVMInstrumentation.a: libLLVMCore.a libLLVMScalarOpts.a libLLVMSupport.a libLLVMTransformUtils.a
libLLVMLinker.a: libLLVMArchive.a libLLVMBitReader.a libLLVMCore.a libLLVMSupport.a libLLVMSystem.a
libLLVMScalarOpts.a: libLLVMAnalysis.a libLLVMCore.a libLLVMSupport.a libLLVMTarget.a libLLVMTransformUtils.a
libLLVMSelectionDAG.a: libLLVMAnalysis.a libLLVMCodeGen.a libLLVMCore.a libLLVMSupport.a libLLVMSystem.a libLLVMTarget.a
libLLVMSupport.a: libLLVMSystem.a
libLLVMSystem.a:
libLLVMTarget.a: libLLVMCore.a libLLVMSupport.a
libLLVMTransformUtils.a: libLLVMAnalysis.a libLLVMCore.a libLLVMSupport.a libLLVMTarget.a libLLVMipa.a
libLLVMipa.a: libLLVMAnalysis.a libLLVMCore.a libLLVMSupport.a
libLLVMipo.a: libLLVMAnalysis.a libLLVMCore.a libLLVMSupport.a libLLVMTarget.a libLLVMTransformUtils.a libLLVMipa.a


More information about the CMake mailing list