2011-07-07 106 views
4

我是新来构建工具,当我遇到Autotool时,我有一个选项,只在顶部生成文件夹中写入一个Makefile.am,并保留包含所有cpp文件的源文件夹干净。我可以使用VPATH告诉automake在该文件夹内查找源代码,而不是在/ src/where处查找。 (请参考我的老问题:Automake Variables to tidy up Makefile.am我应该从源文件夹中分离CMakeList.txt吗?

但是在我看来,CMake没有设置VPATH,有些狐狸说,这是不可能的。因此,有两种选择:

  • 源文件夹
  • 在顶部构建文件夹中创建CMakeList.txt和先不谈源创建CMakeList.txt,与我需要“/ src目录”扩大到成本每个源代码文件。

哪一个更普遍使用?我更喜欢第二个,因为它将源代码从任何构建相关源中清除。在那种情况下,无论如何摆脱“/ src”?

回答

5

在我们公司,我们使用第一个选项,在每个子目录中都有一个CMakeLists.txt,并使用add_subdirectory命令从root-CMakeLists.txt构建树。

这是一个模块化的方法,其中每个子(想想该项目具有不同的部件,如升压被分成系统,线程,DATE_TIME等)都有自己的构建文件。如果用户希望他能够构建子组件或构建整个项目。

我们还用这个作为一种简单的方法,包括可选的子组件项目。然后用户可以设置一个Bool值,如BUILD_SUBFOO,并且add_subdirectory将被执行,如果这个Bool是TRUE

知名项目都使用这种方法了。这里是KDevelop根目录CMakeLists.txt的链接(请看52-62行)。

0

我敢肯定,你可以这样做:

FILE(GLOB Source_files src/*.cpp) 

这将做的正是你想要的。

+0

您也可以使用文件(GLOB_RECURSE SOURCE_FILES的src/*。CPP),因此,如果在src /你的源文件夹中被分裂,这将让他们automaticaly。 – fbafelipe

+0

您没有回答两个选项中哪一个更好,更常用?如果我指定了add_executable(test test.cpp),src/test.cpp会位于何处? – w00d

+4

请注意,使用GLOB时,如果添加新的src/.cpp文件,它将不会被拾取并编译,直到您再次运行cmake。 “触摸CMakeLists.txt”就足够了,但这是一个棘手的方法。 – richq

相关问题