Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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++ 我如何告诉cmake在哪里输出构建数据?_C++_C_Build Process_Cmake - Fatal编程技术网

C++ 我如何告诉cmake在哪里输出构建数据?

C++ 我如何告诉cmake在哪里输出构建数据?,c++,c,build-process,cmake,C++,C,Build Process,Cmake,我如何告诉cmake应该在哪里输出构建数据 假设我有一个dir,源代码为src/, 然后因为cmake输出了很多文件,我希望他把这些都放进去 一个名为build/的目录。 但是我想让他把生成的Makefile放到项目根目录中, 因此,我不必进入builddir来构建应用程序 这在cmake中是可能的吗 如果我在build dir中对cmake感兴趣,我已经成功地将cmake推出,如下所示: cd build/ cmake ../src/ make ./hello 但是,最好留在项目根目录中,

我如何告诉cmake应该在哪里输出构建数据

假设我有一个dir,源代码为src/, 然后因为cmake输出了很多文件,我希望他把这些都放进去 一个名为build/的目录。 但是我想让他把生成的Makefile放到项目根目录中, 因此,我不必进入builddir来构建应用程序

这在cmake中是可能的吗

如果我在build dir中对cmake感兴趣,我已经成功地将cmake推出,如下所示:

cd build/
cmake ../src/
make
./hello 
但是,最好留在项目根目录中,键入类似这样的内容

cmake
make 
./hello
我想我需要在项目根目录中放一个CMakeList.txt,并使用一些神奇的命令告诉他可以将目标文件放在哪里,以及在哪里可以找到源代码

谢谢


更新: 因为我的问题有点模糊

运行cmake命令后,我希望我的树是这样的:

src/CMakeLists.txt
src/hello.c 
src/hello.h

build/CMakeCache.txt  
build/CMakeFiles/
build/cmake_install.cmake  

CMakeLists.txt
Makefile
因此,问题是CMakeLists.txt在这个设置中应该是什么样子

  • CMakeLists.txt
  • src/CMakeLists.txt

但也许这是不可能的?

cmake希望您有一个新的构建目录。

好的,我得到您想要的。我认为,您可以通过CMakeLists.txt中的一些机器来实现这一点。当然,如果您不是项目开发人员,这不是一个选项

在根CMakeLists.txt中,您可以添加file(WRITE…)命令,该命令将Makefile写入${CMAKE_SOURCE_DIR}。此生成文件将包含用于每个目标的以下命令:

<target>:
  cd ${CMAKE_BUILD_DIR} && ${CMAKE_MAKE_PROGRAM} <target>
:
cd${CMAKE_BUILD_DIR}&${CMAKE_MAKE_PROGRAM}
因此,现在您可以从sourcedir运行
make
,它将在builddir中构建您的项目

但是我希望他将生成的Makefile放在项目根目录中,这样我就不必进入构建
dir来构建应用程序。

据我所知,cmake不是为这个设计的, 但您可以留在项目根目录中并键入:
make-C构建
/你好 使用自定义生成规则或set_target_属性, 您可以强制cmake将结果放入可执行文件 源目录或您可以使用 /构建/你好

键入“cd build&&cmake..”只需一次, 之后,如果有什么事情发生,我会自动启动cmake 更改。

只需使用

cmake .
make

在您的src目录中。unix系统上的(.)点用于寻址当前目录。请记住,这样做实际上是不推荐的,因为在您的src目录中会有很多构建文件,您必须在发布后或发布时清理这些文件。

没问题,我的想法是让cmake让该目录自己播放。因此名为build/的目录是空的,这会起作用还是?不,您应该在build目录中运行
make
(在运行
cmake
之后,就像您在第一个示例中所做的那样)。是的,cmake是用于您的第一种方式(至少这是我的理解,但我不是cmake专家),但请稍候,如果我键入cmake这样,cmake文件(CMakeCache.txt、CMakeFiles/、cmake_install.cmake和CMakeList.txt)就不会出现在build目录中,而是在project root目录中创建的?对,我想你正是在问这个问题。也许我应该澄清这个问题。不,只是我的英语解析器有时会失败,抱歉,这与问题的内容还不太接近,我想在项目根目录下运行所有命令。不在任何子曲面中。但我认为cmake对此没有任何支持。你在这方面运气好吗?我想要完全一样的东西。@meffordm不,我放弃了这个想法(还有cmake)。那么,你最终做了什么?也许你的解决方案(即使没有cmake)对我的项目可能会有帮助。那个项目很小,所以我选择了GNU Make,但我正在考虑编写一个小的“包装脚本”(“构建脚本”)并将其放在项目根目录中。我一直在考虑同样的问题……也许是一个python脚本,这样它就可以成为一个跨平台的工具。我只是不喜欢不能控制这个项目。