2011-06-06 156 views
5

我想知道是否有某种方法可以防止cmake中的make clean重新构建外部依赖关系。我使用ExternalProject来构建第三方C++库,即使我做了make clean也不需要重建它们。cmake - 防止`清理`清洗ExternalProject

另一方面,我可能想创建一个新规则,例如make really-clean,它甚至可以清除依赖关系。有没有一个很好的方法来做到这一点?

谢谢。

回答

4

我假设您使用ADD_CUSTOM_COMMAND或ADD_LIBRARY或其他ADD_ *来创建依赖文件。

如果您ExternalProject有它自己的目录,你可以把CMakeLists.txt在该目录中,你可以很容易把以下在CMakeLists.txt

SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1) 

因此,那些依赖文件将不会得到清理。

如果不是,您可能需要避免将外部依赖项作为输出文件。 例如,如果您使用

ADD_CUSTOM_COMMAND(OUTPUT libdep 
    COMMAND dep_gen_cmd 
    .... 
) 

ADD_CUSTOM_COMMAND(OUTPUT prj 
    .... 
    DEPENDS libdep 
) 

,那么你需要将其更改为:

ADD_CUSTOM_TARGET(libdep_gen 
     COMMAND dep_gen_cmd 
     ... 
) 

ADD_CUSTOM_COMMAND(OUTPUT prj 
    COMMAND test -e libdep || make libdep_gen 
    ... 
)