2014-01-06 2 views
0

GLake를 사용하여 CMake에 모든 소스 파일을 포함하고 있지만 제외하고 싶은 특정 파일이 있음을 알고 있습니다. (완료/테스트 후 추후에 추가 될 수 있습니다) 현재 현재 사용하고 있습니다. 각 소스 파일을 파일 목록 * io_masterfiles.txt *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}) 

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 

나는 그게 내 프로젝트에 파일을 포함하는 선호하는 방법이 아니다 들었다

이 필요했습니다. 나는 최상위 디렉토리와 8 개의 하위 디렉토리를 가지고 있으며 각 하위 디렉토리가있는 라이브러리를 만들고 있습니다. 누군가이 파일을 추가하는 가장 좋은 방법을 알려 주시기 바랍니다. 나는 문서를 살펴 봤지만 아무것도 작동하지 못했습니다.

또한 하위 디렉토리 중 하나가 다른 하위 디렉토리에 종속되므로 다른 디렉토리에서 소스 파일을 가져올 수있는 옵션이 필요합니다.

미리 도움을 주셔서 감사합니다.

+0

은 https : /을 /github.com/ruslo/sugar/wiki/Collecting-sources –

답변

2

대신 별도의 .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)