Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在编译过程之前运行一些安装命令?_C++_Cmake - Fatal编程技术网

C++ 如何在编译过程之前运行一些安装命令?

C++ 如何在编译过程之前运行一些安装命令?,c++,cmake,C++,Cmake,我将在我的CMakeLists中使用install命令,如下所示: install(DIRECTORY lib-mmm/src/infra/ DESTINATION /home/nick/infra FILES_MATCHING PATTERN "*.h") 这是将某个目录安装到某个位置的命令 我希望在其他编译过程之前运行此程序 但我发现,当我将它定义为install时,它将仅在makeinstall时被调用,这是在make进程之后 如何使install directory

我将在我的CMakeLists中使用install命令,如下所示:

install(DIRECTORY lib-mmm/src/infra/ DESTINATION /home/nick/infra FILES_MATCHING PATTERN "*.h")
这是将某个目录安装到某个位置的命令

我希望在其他编译过程之前运行此程序

但我发现,当我将它定义为install时,它将仅在makeinstall时被调用,这是在make进程之后


如何使install directory命令在真正的编译过程之前运行?

Afaik使用相同的项目无法做到这一点。安装目标依赖于正在生成的目标,任何生成对安装目标的依赖都将导致循环依赖

不过,还有其他选择:

  • 使用
  • 使用
    execute\u process
    在配置期间设置、构建和安装另一个cmake项目。不过,让cmake对该构建使用相同的选项可能会有问题。这也可以通过获得
    add_custom_命令
    来改进


  • 在您的情况下,使用
    target\u include\u directories
    简单地添加正确的include目录可能会更好。

    这感觉像是一个XY问题,尤其是在您尝试安装头文件时。你的实际问题是什么?你想解决的真正问题是什么?在编译项目之前,找不到
    infra
    ?@StephenNewell的头文件,我会将一些头文件安装到某个位置,并且项目源代码正在使用该位置的头文件,因此,必须先调用install this header,然后再调用编译过程。我认为install()无法使我的安装头首先工作,我想知道如何才能做到这一点。您可以在配置过程中使用命令来复制文件和目录。@gordan.sikic问题是:使用了旧的infra,因为源代码使用的是infra代码,所以在编译其他代码之前,我必须先安装infra。