0

请考虑以下结构:

dev_root/
  \__ common/
        \__ inc/
        \__ src/
        \__ CMakeLists.txt
  \__ project1/
        \__ inc/
        \__ src/
        \__ CMakeLists.txt
  \__ project2/
        \__ inc/
        \__ src/
        \__ CMakeLists.txt

Project1 和 Project2 是独立的项目。他们都使用通用代码。我想(有选择地)将一些常见的源文件列出到每个项目的 Visual Studio 项目文件中,以便我可以在 IDE 中编辑它们。
我不想要通用代码的独立库。

现在我使用相对路径,例如在 project1 的 cmake 文件中:

set(_hdr
    inc/proj1.h
    ../common/inc/common1.h
)
set(_src
    src/proj1.cxx
    ../common/src/common1a.cxx
    ../common/src/common1b.cxx
)
source_group("common\\inc" FILES 
              ../common/inc/common1.h 
)
source_group("common\\src" FILES 
              ../common/src/common1a.cxx 
              ../common/src/common1b.cxx
)
source_group("inc" FILES inc/proj1.h)
source_group("src" FILES src/proj1.cxx)

add_executable( project1 ${_src} ${_hdr} )

这不灵活——如果我想移动文件夹,所有 CMakeLists.txt 都必须经过审查和修改。有没有更优雅的方式来解耦依赖关系,或者有什么更好的方式来处理常见的源文件?

欢迎任何建议。非常感谢。

4

1 回答 1

0

You may set variable to the path to 'common' folder, and use it for refer to files in it. So, whenever you need to move 'common' folder around, you need to edit only this variable.

CMakeLists.txt:

set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common)

project1/CMakeLists.txt:

set(_hdr
    inc/proj1.h
    ${COMMON_DIR}/inc/common1.h
)
set(_src
    src/proj1.cxx
    ${COMMON_DIR}/src/common1a.cxx
    ${COMMON_DIR}/src/common1b.cxx
)
...
于 2015-07-31T19:19:27.863 回答