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

时间:2011-04-12 14:55:01

标签: cmake

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

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

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

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

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:1)

您可以使用install(SCRIPT swigInstaller.cmake)或安装(DIRECTORY),它们都支持在安装时进行文件全局操作。您可以在以下位置阅读有关安装命令的更多信息:

http://cmake.org/cmake/help/cmake-2-8-docs.html#command:install

相关问题