cmake安装目标中的编译时通配符

Ern*_*ill 3 cmake

我是cmake的新手,我发现它非常令人沮丧.我试图在构建运行时评估的文件路径中使用通配符,而不是在生成构建时使用.

我创建了一个使用SWIG为某些C++代码生成Java包装器的构建.我可以编写命令来生成本机代码,编译它,并生成一个可用的共享库,甚至可以使用INSTALL命令正确安装该共享库.我无法弄清楚怎么做是编写一个INSTALL命令,可以将SWIG生成的所有*.java文件复制到同一个安装位置.

似乎cmake的FILE GLOB命令在执行cmake时执行globbing,而不是在构建实际运行时执行.当然,执行cmake时,SWIG尚未运行,并且Java文件不存在.

有办法做我想要的吗?我说错了吗?看起来这是Makefiles需要做的事情的一个基本部分,我真的很惊讶没有找到一个简单的方法来做到这一点.

sak*_*kra 14

假设Java包装器位于当前二进制目录中,您可以使用以下install命令在安装时复制Java文件:

install(
    CODE "file( GLOB _GeneratedJavaSources \"${CMAKE_CURRENT_BINARY_DIR}/*.java\" )"
    CODE "file( INSTALL \${_GeneratedJavaSources} DESTINATION \"$ENV{HOME}\" )"
)
Run Code Online (Sandbox Code Playgroud)

该命令的CODE形式install用于在运行安装目标时执行两个CMake命令.第一个收集辅助变量中生成的所有Java文件.第二个使用命令的INSTALL形式file来复制文件.