目前,我有以下結構是否可以繞過add_subdirectory()命令的新範圍創建?
`-- system
|-- CMakeLists.txt
|-- dll
| |-- CMakeLists.txt
| |-- UnixDLoader.cpp
| |-- ...
| `-- WinDLoader.hh
|-- sockets
| |-- CMakeLists.txt
| |-- crossplateform_utils.h
| |-- ...
| `-- Udp.hh
`-- threads
|-- CMakeLists.txt
|-- IMutex.hh
|-- ...
`-- WinThread.hh
我的根CMakeLists.txt
是遵循
project(system)
add_subdirectory(dll)
add_subdirectory(sockets)
add_subdirectory(threads)
add_library(${PROJECT_NAME}
${${PROJECT_NAME}_HEADERS}
${${PROJECT_NAME}_SOURCES}
)
,並在threads/
例如,我有以下
list(APPEND ${PROJECT_NAME}_HEADERS
IThread.hh
UnixThread.hh
WinThread.hh
IMutex.hh
UnixMutex.hh
WinMutex.hh
)
set(${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_HEADERS} PARENT_SCOPE)
list(APPEND ${PROJECT_NAME}_SOURCES
UnixThread.cpp
WinThread.cpp
UnixMutex.cpp
WinMutex.cpp
PARENT_SCOPE
)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES} PARENT_SCOPE)
if(UNIX)
target_link_libraries(${PROJECT_NAME} pthread)
endif(UNIX)
但是,作爲add_subdirectory()
創建一個新的範圍,我的${PROJECT_NAME}_*
變量是空的。我讀了set(... PARENT_SCOPE)
,但是路徑變成了殘疾人,並且無論如何cmake在致電target_link_libraries()
system/threads/CMakeLists.txt
說Cannot specify link libraries for target "system" which is not built by this project.
產生錯誤。範圍問題再次。
所以我雖然我會很好,如果我找到一個解決方案來繞過範圍創建,但我會採取任何解決方案,保持我的架構的邏輯。
您的解決方案非常完美,非常感謝。 – tomahh