如何在涉及选项时控制CMAKE构建子目录的顺序?

时间:2015-02-27 14:36:38

标签: cmake

我知道CMake会自动以某种方式计算出依赖树。它通常会以正确的顺序构建东西。

我决定使用选项,这导致它猜得不好。

我有以下this SO question的变体:

/CMakeLists.txt
  /src/CMakeLists.txt
  /testpackage1/CMakeLists.txt
  /testpackage2/CMakeLists.txt

在我的例子中,mylib有两种 - 静态和动态。

OPTION(MYLIB_BUILD_STATIC "Build static library" TRUE)
IF(MYLIB_BUILD_STATIC)
    ADD_LIBRARY(mylib_static STATIC ${MyLib_SRCS})
    ...
    SET_TARGET_PROPERTIES(mylib_static PROPERTIES OUTPUT_NAME "mylib")
    SET(MYLIB_LIB_TARGET mylib_static)
ENDIF(MYLIB_BUILD_STATIC)


OPTION(MYLIB_BUILD_SHARED "Build shared library" TRUE)
IF(MYLIB_BUILD_SHARED)
    ADD_LIBRARY(mylib SHARED ${MyLib_SRCS})
    ...
    SET(MYLIB_LIB_TARGET mylib)
ENDIF(MYLIB_BUILD_SHARED)

此时${MYLIB_LIB_TARGET}中有mylibmylib_static

在单元测试包....

OPTION(MYLIB_BUILD_TEST "Build test program." TRUE)
IF(MYLIB_BUILD_TEST)
    INCLUDE_DIRECTORIES(${MYLIB_SOURCE_DIR})
    ADD_EXECUTABLE(test_mylib main.c)
    IF(NOT MYLIB_LIB_TARGET)
        MESSAGE(FATAL_ERROR "MYLIB_LIB_TARGET is not specified")
    ENDIF() 
    TARGET_LINK_LIBRARIES(test_mylib ${MYLIB_LIB_TARGET})
ENDIF(MYLIB_BUILD_TEST)

在父母:

ADD_SUBDIRECTORY("src")
ADD_SUBDIRECTORY("testpackage1")
ADD_SUBDIRECTORY("testpackage2")

我得到的是:来自单元测试项目的MYLIB_LIB_TARGET is not specified

我认为这是因为选项会搞乱CMake中的自动依赖树逻辑。

0 个答案:

没有答案