-
Notifications
You must be signed in to change notification settings - Fork 2
CMake guild for QMCPACK developers
Transit to modern CMake with clean organization.
For a command line,
gcc -g -O3 -o abc.x -DENABLE_ABC -DNX=1 -I/libhdf5/include a.cpp b.cpp c.cpp -L/libhdf5 -lhdf5
segments | attribute |
---|---|
-g -O3 -o abc.x |
COMPILE_OPTIONS |
-DENABLE_ABC -DNX=1 |
COMPILE_DEFINITIONS |
-I/libhdf5/include |
INCLUDE_DIRECTORIES |
a.cpp b.cpp c.cpp |
target source files |
-L/libhdf5 -lhdf5 |
libraies. should be defined as targets. |
private: used for compiling this target only
interface: used for compiling other targets depend on this target but not used inside this target.
public = private + public
src/Platforms
Message
Utilities
Containters
Particles
QMCWavefunctions
QMCHamiltonians
QMCDrivers
QMCApp
each top level folder is a target as self contained as possible to reduce entanglements. This is beneficial for unit testing as well.
SET(DEVICE_SRCS
accelerators.cpp
)
ADD_LIBRARY(platform_device ${DEVICE_SRCS})
TARGET_INCLUDE_DIRECTORIES(platform_device INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
#provide -I src/Platforms to consumer outside Platforms
SUBDIRS(OpenMP)
TARGET_LINK_LIBRARIES(platform_device PRIVATE platform_omp)
#provide only -lplatform_omp but no INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS propagation.
We should avoid reference files based on src
. For example, NonLocalECPComponent.h
under QMCHamiltonians
includes TrialWaveFunction.h
from the QMCWaveFunctions
folder. The old way writes <QMCWaveFunctions/TrialWaveFunction.h>
which bypasses the dependency.
Instead, QMCHamiltonians
folder is represented by the qmcham
target and QMCWaveFunctions
folder is represented by the qmcwfs
target. The qmcham
target dependency on qmcwfs
has been expressed in CMake.
In the new way, we should only do #include <TrialWaveFunction.h>
instead of <QMCWaveFunctions/TrialWaveFunction.h>
. The dependency and include link path are fully handled by CMake.
Consider each target is a library. When including a header file from a target different from what the current file belongs to use <>
instead of ""