The structure you've configured in the .conf file will work when you use the openssl ca command to sign a request from a subordinate (CA or end-entity). However to get it to the stage where you can sign certificates, it needs the CA certificate and key in place. Your openssl req command generates those. To get sensible values in the CA certificate you need to add more to your .conf file.
Something similar to the following should get you started:
[ req ]
# Don't prompt for the DN, use configured values instead
# This saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_dn
# The size of the keys in bits:
default_bits = 4096
[ req_dn ]
countryName = GB
stateOrProvinceName = Somewhere
organizationName = Example
organizationalUnitName = PKI
commonName = Example Test Root CA
[ ca_ext ]
# Extensions added to the request
basicConstraints = critical, CA:TRUE
keyUsage = critical, keyCertSign, cRLSign
Create the CA certificate with a slightly modified version of your previous command:
openssl req -x509 -newkey rsa:4096 -keyout /home/will/myCA/private/cakey.pem -out /home/will/myCA/cacert.pem -days 3650 -nodes -config <path-to>/openssl.cnf -extensions ca_ext
Note: you only need the -config option if you're not using/editing the default config file.
If everything works, you'll have the correct certificate and key in place for your CA config above. Before you can sign any certificates with the openssl ca command, you'll need to make sure index.txt exists and create serial with an initial serial number (such as 01).
OpenSSL is the Swiss-Army knife of crypto therefore has many options. Unfortunately, reading the man pages is the only way to get to understand it.