Including files from one directory up with CMake or basic builders
-
I have an in-progress app I've been trying to create from a godot game demo.
Mostly I've been making great progress with this. I got a click package to build and "start" godot (with a crash), and I actually contributed a fix to the docker image for arm64 hosts so it's now easier to debug + build the game on an arm64 machine before sending it to the phone.
One thing I've been having a lot of unnecessary trouble with is keeping a reasonable directory structure and still compiling my click package. I have things arranged like this:
repository | `--- main branch directories | `--- zensekai (experimental branch directory) | `--- bin (compiled game) | `--- zensekai-click (click package)And the Makefile in
zensekaicopies/compiles all the game binaries that should be needed for either the desktop version or the click package.From reading the
clickabledocumentation I felt like I should be able to set the project root to../akazensekaiand from thezensekai-click/CMakeLists.txtfile copy in binaries frombin. But CMake seems to only want to put files inzensekai-clickinto the container for building, and I have no idea what command or "makefile" to use for the pure or custom builders much less whether they can do this, and I'm very confused. -
The solution to this was laughably simple.
all I had to do wastouch CMakeLists.txtmaking a completely empty file in thezensekaidirectory, and then CMake automatically decided to continue inzensekai-clickwith the otherCMakeLists.txt.
edit 7-13:
There was actually a little more required.in the top CMakeLists.txt I had to put
add_subdirectory(zensekai-click)and in the
zensekai-clickone I accessed/disambiguated the two directories with# set $PR_ROOT to upper directory get_filename_component(PR_ROOT "../" ABSOLUTE) # set $CLICK_DIR to zensekai-click directory set(CLICK_DIR "${PR_ROOT}/zensekai-click")another thing you might run into developing a click package that copies binaries is permissions on binaries.
I set them in the loop that copies the binaries like so:foreach(binary ${BINARIES}) install(FILES ${PR_ROOT}/bin/${binary} # the important part PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE # this might actually be unnecessarily permissive*. # it might be enough to just have OWNER_READ and OWNER_EXECUTE DESTINATION ${DATA_DIR} ) endforeach()(* I got sidetracked thinking the permissions weren't enough when I accidentally had my project copying the x86_64 godot binary for a bit - which had bash claiming it "wasn't permitted" to execute while it actually meant that was impossible.)