Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在CMake中仅指定某些源文件_C++_C_Cmake - Fatal编程技术网

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

C++ 在CMake中仅指定某些源文件,c++,c,cmake,C++,C,Cmake,我知道使用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_mast

我知道使用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 )