避免重复多个文件包含的目录名称

时间:2013-07-30 00:55:20

标签: cmake

我有一个库的CMakeLists.txt文件。这很基本:

set(LIB_FILES source/first.cpp)

add_library(first ${LIB_FILES})

我将文件放在列表中,因为我最终会向库中添加更多源文件。问题是所有文件都在source目录中。而且我不想经常重复这一点。

我也不想使用GLOB模式匹配解决方案,因为我想在添加新文件时编辑CMakeLists.txt文件。这样,我的构建将重新构建构建解决方案,并且新文件将正确显示(据我所知。我仍然是CMake的新手。)

我尝试将CMakeLists.txt文件添加到source目录中,只是为了构建LIB_FILES列表。这不是很好。 CMake中的变量是文件范围。即使我打破范围界定(使用PARENT_SCOPE),我仍然必须在每个文件前面加上目录。所以一无所获。

我不想将实际的库定义放在source目录中,因为这将生成source目录中的所有构建文件。我不希望这样。此外,我还需要包含不在source目录中或下面的标题。

我的目录结构如下所示:

libroot (where the project build files should go)
\-source (where the source code is)
\-include (where the headers that the user of the library includes go)

那么我如何告诉CMake所有的源文件都来自source目录,这样我就不必经常拼出来了?

2 个答案:

答案 0 :(得分:3)

您也可以将add_library来电转移到您的来源/ CMakeLists.txt:

set(LIB_FILES first.cpp)
add_library(first ${LIB_FILES})

然后在您的顶级CMakeLists.txt中使用add_subdirectory

add_subdirectory(source)

答案 1 :(得分:2)

你可以使用一个简单的宏

macro(AddSrc dst_var basepath_var)
    foreach(file ${ARGN})
        list(APPEND ${dst_var} ${basepath_var}/${file})
    endforeach()
endmacro()

set(MY_SRCFILES "")

AddSrc(MY_SRCFILES path/to/source
    foo.cpp
    bar.cpp
    whatever.cpp
)