add hello world example
This commit is contained in:
parent
c669bd10e1
commit
7c719d92fa
@ -90,11 +90,19 @@ to all libraries it needs::
|
|||||||
|
|
||||||
$ python update.py --self
|
$ python update.py --self
|
||||||
|
|
||||||
|
- fetching lib/config.py
|
||||||
|
- fetching lib/docopt.py
|
||||||
|
- fetching update.py
|
||||||
|
|
||||||
Good. Now we can generate ``CMakeLists.txt`` and ``setup.py``::
|
Good. Now we can generate ``CMakeLists.txt`` and ``setup.py``::
|
||||||
|
|
||||||
$ python update ..
|
$ python update ..
|
||||||
|
|
||||||
Here is the generated ``CMakeLists.txt``::
|
- parsing autocmake.cfg
|
||||||
|
- generating CMakeLists.txt
|
||||||
|
- generating setup.py
|
||||||
|
|
||||||
|
Excellent. Here is the generated ``CMakeLists.txt``::
|
||||||
|
|
||||||
# set minimum cmake version
|
# set minimum cmake version
|
||||||
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
|
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
|
||||||
@ -110,9 +118,11 @@ Here is the generated ``CMakeLists.txt``::
|
|||||||
set(CMAKE_BUILD_TYPE "Debug")
|
set(CMAKE_BUILD_TYPE "Debug")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
This is the very minimum. Every project will have at least these settings.
|
This is the very bare minimum. Every Autocmake project will have at least these
|
||||||
|
settings.
|
||||||
|
|
||||||
And we also got a ``setup.py`` script with the following default options::
|
And we also got a ``setup.py`` script (front-end to ``CMakeLists.txt``) with
|
||||||
|
the following default options::
|
||||||
|
|
||||||
$ python setup.py -h
|
$ python setup.py -h
|
||||||
|
|
||||||
@ -129,7 +139,7 @@ And we also got a ``setup.py`` script with the following default options::
|
|||||||
-h --help Show this screen.
|
-h --help Show this screen.
|
||||||
|
|
||||||
That's not too bad although currently we cannot do much with this since there
|
That's not too bad although currently we cannot do much with this since there
|
||||||
are no sources listed, no targets, no nothing. We need to flesh out
|
are no sources listed, no targets, hence nothing to build. We need to flesh out
|
||||||
``CMakeLists.txt`` and this is what we will do in the next section.
|
``CMakeLists.txt`` and this is what we will do in the next section.
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,4 +3,142 @@
|
|||||||
Example Hello World project
|
Example Hello World project
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
Write me ...
|
This is a brief example for the busy and impatient programmer. For a longer
|
||||||
|
tour please see :ref:`autocmake_cfg`.
|
||||||
|
|
||||||
|
We start with a mixed Fortran-C project with the following sources::
|
||||||
|
|
||||||
|
feature1.F90
|
||||||
|
feature2.c
|
||||||
|
main.F90
|
||||||
|
|
||||||
|
First thing we do is to create a directory ``src/`` and we move all sources
|
||||||
|
there. This is not necessary for Autocmake but it is a generally good practice::
|
||||||
|
|
||||||
|
.
|
||||||
|
`-- src
|
||||||
|
|-- feature1.F90
|
||||||
|
|-- feature2.c
|
||||||
|
`-- main.F90
|
||||||
|
|
||||||
|
Now we create ``cmake/`` and fetch ``update.py``::
|
||||||
|
|
||||||
|
$ mkdir cmake
|
||||||
|
$ cd cmake/
|
||||||
|
$ wget https://raw.githubusercontent.com/scisoft/autocmake/master/update.py
|
||||||
|
$ python update.py --self
|
||||||
|
|
||||||
|
Now from top-level our file tree looks like this::
|
||||||
|
|
||||||
|
.
|
||||||
|
|-- cmake
|
||||||
|
| |-- autocmake.cfg
|
||||||
|
| |-- lib
|
||||||
|
| | |-- config.py
|
||||||
|
| | `-- docopt.py
|
||||||
|
| `-- update.py
|
||||||
|
`-- src
|
||||||
|
|-- feature1.F90
|
||||||
|
|-- feature2.c
|
||||||
|
`-- main.F90
|
||||||
|
|
||||||
|
Now we edit ``cmake/autocmake.cfg`` to look like this::
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name: hello
|
||||||
|
|
||||||
|
[fc]
|
||||||
|
source: https://github.com/scisoft/autocmake/raw/master/modules/fc.cmake
|
||||||
|
|
||||||
|
[cc]
|
||||||
|
source: https://github.com/scisoft/autocmake/raw/master/modules/cc.cmake
|
||||||
|
|
||||||
|
[src]
|
||||||
|
source: https://github.com/scisoft/autocmake/raw/master/modules/src.cmake
|
||||||
|
|
||||||
|
What we have specified here is the project name and that we wish Fortran and C
|
||||||
|
support. The ``[src]`` module tells CMake to include a ``src/CMakeLists.txt``.
|
||||||
|
We need to create ``src/CMakeLists.txt`` which can look like this::
|
||||||
|
|
||||||
|
add_executable(
|
||||||
|
hello.x
|
||||||
|
main.F90
|
||||||
|
feature1.F90
|
||||||
|
feature2.c
|
||||||
|
)
|
||||||
|
|
||||||
|
We wrote that we want to get an executable "hello.x" built from our sources.
|
||||||
|
|
||||||
|
Now we have everything to generate ``CMakeLists.txt`` and ``setup.py``::
|
||||||
|
|
||||||
|
$ cd cmake
|
||||||
|
$ python update ..
|
||||||
|
|
||||||
|
And this is what we got::
|
||||||
|
|
||||||
|
.
|
||||||
|
|-- CMakeLists.txt
|
||||||
|
|-- cmake
|
||||||
|
| |-- autocmake.cfg
|
||||||
|
| |-- downloaded
|
||||||
|
| | |-- autocmake_cc.cmake
|
||||||
|
| | |-- autocmake_fc_optional.cmake
|
||||||
|
| | `-- autocmake_src.cmake
|
||||||
|
| |-- lib
|
||||||
|
| | |-- config.py
|
||||||
|
| | `-- docopt.py
|
||||||
|
| `-- update.py
|
||||||
|
|-- setup.py
|
||||||
|
`-- src
|
||||||
|
|-- CMakeLists.txt
|
||||||
|
|-- feature1.F90
|
||||||
|
|-- feature2.c
|
||||||
|
`-- main.F90
|
||||||
|
|
||||||
|
Now we are ready to build::
|
||||||
|
|
||||||
|
$ python setup.py --fc=gfortran --cc=gcc
|
||||||
|
|
||||||
|
FC=gfortran CC=gcc cmake -DEXTRA_FCFLAGS="''" -DENABLE_FC_SUPPORT="ON" -DEXTRA_CFLAGS="''" -DCMAKE_BUILD_TYPE=release -G "Unix Makefiles" None /home/user/example
|
||||||
|
|
||||||
|
-- The C compiler identification is GNU 4.9.2
|
||||||
|
-- The CXX compiler identification is GNU 4.9.2
|
||||||
|
-- Check for working C compiler: /usr/bin/gcc
|
||||||
|
-- Check for working C compiler: /usr/bin/gcc -- works
|
||||||
|
-- Detecting C compiler ABI info
|
||||||
|
-- Detecting C compiler ABI info - done
|
||||||
|
-- Detecting C compile features
|
||||||
|
-- Detecting C compile features - done
|
||||||
|
-- Check for working CXX compiler: /usr/bin/c++
|
||||||
|
-- Check for working CXX compiler: /usr/bin/c++ -- works
|
||||||
|
-- Detecting CXX compiler ABI info
|
||||||
|
-- Detecting CXX compiler ABI info - done
|
||||||
|
-- Detecting CXX compile features
|
||||||
|
-- Detecting CXX compile features - done
|
||||||
|
-- The Fortran compiler identification is GNU 4.9.2
|
||||||
|
-- Check for working Fortran compiler: /usr/bin/gfortran
|
||||||
|
-- Check for working Fortran compiler: /usr/bin/gfortran -- works
|
||||||
|
-- Detecting Fortran compiler ABI info
|
||||||
|
-- Detecting Fortran compiler ABI info - done
|
||||||
|
-- Checking whether /usr/bin/gfortran supports Fortran 90
|
||||||
|
-- Checking whether /usr/bin/gfortran supports Fortran 90 -- yes
|
||||||
|
-- Configuring done
|
||||||
|
-- Generating done
|
||||||
|
-- Build files have been written to: /home/user/example/build
|
||||||
|
|
||||||
|
configure step is done
|
||||||
|
now you need to compile the sources:
|
||||||
|
$ cd build
|
||||||
|
$ make
|
||||||
|
|
||||||
|
$ cd build/
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Scanning dependencies of target hello.x
|
||||||
|
[ 25%] Building Fortran object src/CMakeFiles/hello.x.dir/main.F90.o
|
||||||
|
[ 50%] Building Fortran object src/CMakeFiles/hello.x.dir/feature1.F90.o
|
||||||
|
[ 75%] Building C object src/CMakeFiles/hello.x.dir/feature2.c.o
|
||||||
|
[100%] Linking Fortran executable hello.x
|
||||||
|
[100%] Built target hello.x
|
||||||
|
|
||||||
|
Excellent!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user