Getting cmake to run before building after pulling from git

后端 未结 1 680
鱼传尺愫
鱼传尺愫 2020-12-06 23:37

There is this project kept in a git repository, which we build with cmake and ninja. We are using globbing expressions/functions to collect all the source files to be compil

相关标签:
1条回答
  • 2020-12-06 23:50

    Putting a post-merge script file in .git/hooks seems to do the trick:

    #!/bin/sh
    #
    
    touch source/CMakeLists.txt
    

    The execution path is apparently the root directory of the project, which is ideal for this kind of operation. I tested this by calling "pull" in the TartoiseGit context menu from one "random" subfolder of the project. Here are some instructions on how one could test the script.

    Drawback: if somebody is modifying the CMakeLists.txt in his editor, with some unsaved modifications, he might lose some work if too quick in answering to the prompt "the file has changed on the disk..."


    Then, to make this script part of the repository, I found the following solution that seems to be good for our (non-public) project.

    1) Create a folder (e.g. zz_gitHookScripts) for git hook scripts and put the files everybody should be using. Add it to the repository.
    2) Add something like this to the CMakeLists.txt, so that the files will be put in the effective directory first time cmake will be run (and, given the above, this will happen the first time we build after pulling, also the first time because CMakeLists.txt gets modified through this edit):

    file(GLOB HOOK_SCRIPTS zz_gitHookScripts/*)
    if (HOOK_SCRIPTS)
        file(COPY ${HOOK_SCRIPTS} DESTINATION ${CMAKE_SOURCE_DIR}/../.git/hooks) 
    endif (HOOK_SCRIPTS)
    

    In case of patches, an equivalent post-applypatch hook might be used.

    Drawbacks:

    • it is not triggered in case of stash (a user stashing a change which adds/removes files, must still remember to manually run cmake), or in case of a patch
    • users cannot personalize the hook scripts
    • removing some hook script we don't want to use anymore might be complicated
    • in general all branches will have to share the same hooks

    Anyway, like this it's good for our needs.

    0 讨论(0)
提交回复
热议问题