gpt4 book ai didi

c++ - 在 CMake 中仅指定某些源文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:47 26 4
gpt4 key购买 nike

我知道使用 GLOB 将所有源文件包含在 CMake 中,但我想排除某些文件(它们可能会在将来完成/测试后添加)目前我正在使用:

FILE(READ "io_masterFiles.txt" contents)
STRING(REGEX REPLACE "\n" ";" contents "${contents}")
foreach(io_masterFiles ${contents})
message("${io_masterFiles}")
endforeach()
ADD_LIBRARY(io_master ${contents})

文件 *io_masterfiles.txt* 列出了每个需要的源文件

AD7991.cpp
ADS7844.cpp
AI633.cpp
AI638.cpp
AI644.cpp
analogFlag.cpp
analogInputBoard.cpp
analogInputDevice.cpp
analogInputList.cpp
analogIoPoint.cpp
boardFactory.cpp
controllerConfig.c
${CMAKE_SOURCE_DIR}/project-specific/MHI-VFD/customIoHandler.cpp (these do not work)
${CMAKE_SOURCE_DIR}/project-specific/MHI-VFD/customIoHandlerFactory.cpp (or this one)
diffVoltage.cpp
digitalFlagBit.cpp
digitalInputList.cpp
digitalIoDevice.cpp
digitalIoPoint.cpp
digitalOutputList.cpp
digitalPort.cpp
DS1731.cpp
EPCOS_B57560G.cpp
gpioChipSelect.cpp
i2cBus.cpp
ioBus.cpp
ioCondition.cpp
ioCondition_Unused.cpp
ioController.cpp
ioMaster.cpp
ioPoint.cpp
L9826.cpp
linear.cpp
loop_4_20.cpp
mcp23S17.cpp
measuredTemperature.cpp
semiKron.cpp
sharedAnalogFlag.cpp
sharedDigitalFlagBit.cpp
spiBus.cpp
voltage.cpp
water.cpp
x11.cpp
x11_01.cpp

有人告诉我这不是在我的项目中包含文件的首选方式。我有一个顶级目录,然后是八个子目录,并且正在为每个子目录创建一个库。有人可以让我知道添加这些文件的最佳方法吗?我查看了文档,但无法提出任何有效的方法。

此外,其中一个子目录在不同的子目录中具有依赖项,因此我需要一个允许从不同目录中提取源文件的选项。

预先感谢您的帮助。

最佳答案

与其在单独的 .txt 中列出文件,不如在 CMake 变量中列出文件,例如:

set( io_master_SRCS
AD7991.cpp
ADS7844.cpp
AI633.cpp
AI638.cpp
AI644.cpp
# and so on
)
add_library( io_master ${io_master_SRCS} )

当新的源文件准备就绪时,您可以直接将此变量添加到 CMakeLists.txt 中。

关于子目录,约定是为每个子目录指定任何构建目标的 CMakeLists.txt。您可以引用您在项目其他地方指定的构建目标。

举个例子,假设我有一个名为 a 的子文件夹。把它放在顶级 CMakeLists.txt 中:

add_subdirectory( a )

然后在 a/CMakeLists.txt 中,您可以引用 io_master 库(或按名称在另一个子目录中的任何其他构建目标):

target_link_libraries( another_target io_master )

关于c++ - 在 CMake 中仅指定某些源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com