c++ - 我可以创建一个文件来提及我要构建的所有文件 : c++

标签 c++ cmake

在 React 中,我可以为我的容器/组件编写这样的代码:

export App from './App/App';
export Chat from './Chat/Chat';
export Home from './Home/Home';

这允许我指定我从那个目录导出的东西。我可以在 CMake 中做类似的事情吗?

我想要的是能够创建一个包含我想要构建的文件的头文件。我不想在 CMakeLists.txt 中列出它们,因为它变得太困惑了。我也不想 GLOB_RECURSE 因为它不允许我选择文件。我该怎么做?

最佳答案

只需创建列出来源的文件:

sources.list:

foo.c
bar/baz.c

并使用 file(STRINGS) 命令将其读取到变量中:

CMakeLists.txt:

# Load list of sources into 'sources' variable
file(STRINGS "sources.list" sources)

# Use the variable
add_executable(my_exe ${sources})

正如@wasthishelpful 所指出的,file(STRINGS) 中使用的文件 未被 CMake 跟踪。也就是说,如果文件的内容将被修改(例如,将添加新的源),则需要显式调用 cmake 来反射(reflect)此修改。 (也就是说,简单的 make 不会导致 cmake 重新运行)。

file(STRINGS) 的替代方案,它强制 CMake 跟踪带有源文件的文件。是 include():

sources.cmake:

set(sources
    "foo.c"
    "bar/baz.c"
)

CMakeLists.txt:

# Run additional script, which fills 'sources' variable with list of sources
include(sources.cmake)

# Use the variable
add_executable(my_exe ${sources})

这样一来,如果“sources.cmake”将被更改,cmake 将在 make 调用时自动重新运行。

关于c++ - 我可以创建一个文件来提及我要构建的所有文件 : c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40784757/

相关文章:

c++ - CMake:自定义工具链:CMAKE_AR 和 CMAKE_CXX_ARCHIVE_CREATE

windows - 如何使用 CMake 构建将特定 list 文件嵌入到 Windows DLL 中?

lambdas 的 C++ vector - undefined reference

C++ 生成器 2010

c++ - C++中的平台无关/dev/null

Android Studio CMake 为所有构建变体构建一次

c++ - C++中的虚拟与非虚拟多重继承

c++ - “INPUT”未在此范围内声明

c++ - CMake C++ 库链接

c++ - 链接到 Caffe 库的正确方法