如何仅在构建系统上而不在目标系统上定义CMake中的依赖项

时间:2018-10-29 07:23:32

标签: cmake

我遇到以下问题:我使用CMake构建了一个SDK。在构建过程中,custom_target会生成一个公共的头文件,该头文件随后将提供给客户端。客户端应用程序需要此头文件,因此SDK附带提供了示例应用程序。因此,在我的构建系统中,示例应用程序当前表达了对生成标头的目标的依赖性,以便在尝试构建示例应用程序之前就生成了标头:

set(TARGET MyExample)
set(SOURCES ${TARGET}.cpp)
add_executable(${TARGET} ${SOURCES})
add_dependencies(${TARGET} InterfaceHeaderGenerator)
# ... more code 

现在在客户端系统上,由“ InterfaceGenerator”生成的文件当然已经存在,因此这种依赖关系无效。

我正在寻找一种方法,可以将我的CMake文件发送给客户,使他可以使用它们而无需为“开发”和“客户端”模式维护CMakeLists.txt文件的2个不同副本。

我知道可以使用与CPack关联的生成器表达式解决此问题。但是我不能使用CPack,因为它缺少我需要的另一个功能:能够在多个软件包中运送和安装THE SAME目标。

那有可能吗?

1 个答案:

答案 0 :(得分:0)

使用add_dependency()保护此if(BUILDING_SDK)调用,并将此变量默认设置为OFF,在您的情况下设置为ON