如何告诉cmake输出构建数据的位置?

时间:2011-11-08 12:39:38

标签: c++ c build-process cmake

如何告诉cmake输出构建数据的位置?

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

这可以用cmake吗?

如果我喜欢在这样的构建目录中使用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

但也许那是不可能的?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好的,我得到了你想要的东西。我想,你可以用CMakeLists.txt中的一些机器来实现这一点。当然,如果您不是项目开发人员,那么它不是选择。

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

<target>:
  cd ${CMAKE_BUILD_DIR} && ${CMAKE_MAKE_PROGRAM} <target>

所以,现在你可以从源目录运行make,它将在build dir中构建你的项目。

答案 2 :(得分:0)

  

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

cmake不是为此而设计的,据我所知, 但是你可以留在项目根目录并输入:
make -C build
。/你好 使用自定义构建规则或set_target_properties, 你可以强制cmake将结果可执行文件放到 sources目录或者您可以使用 ./build/hello

输入“cd build&amp;&amp; cmake ..”你只需要一次, 之后make会自动启动cmake,如果有的话 改变。

答案 3 :(得分:-2)

只需使用

cmake .
make

在你的src目录中。 unix系统上的(。)点代表当前目录。请记住,实际上不建议这样做,因为在src目录中会有很多构建文件,您必须在事后或发布时清理它们。