set a cmake variable if it is not changed by the user

前端 未结 2 901
眼角桃花
眼角桃花 2020-12-19 14:29

How can i (re)set cmake variable only when it is not changed by the user?

I have this variables:

set(DIR \"testdir\" CACHE PATH \"main directory\")
s         


        
2条回答
  •  一生所求
    2020-12-19 14:55

    Along with cache variable SUBDIR visible to the user, you may store another cache variable, say SUBDIR_old, which contains the last value of SUBDIR and marked as INTERNAL (that is not intended to be modified by the user).

    Next launching of cmake you may compare values of SUBDIR and SUBDIR_old, and if they differ, then user has modified SUBDIR:

    if(NOT DEFINED SUBDIR_old OR (SUBDIR EQUAL SUBDIR_old))
        # User haven't changed SUBDIR since previous configuration. Rewrite it.
        set(SUBDIR  CACHE PATH "" FORCE)
    endif()
    # Store current value in the "shadow" variable unconditionally.
    set(SUBDIR_old ${SUBDIR} CACHE INTERNAL "Copy of SUBDIR")
    

    Problem with that approach that user cannot say:

    I have checked value of SUBDIR and found it already correct.

    Without modification we assume that user don't bother about variable's value.

提交回复
热议问题