目前,我有以下结构是否可以绕过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