cmake:根据操作系统更改EXTERNALPROJECT_ADD中的PREFIX

4

我需要根据不同的操作系统更改以下代码中的cmake PREFIX。

我尝试了以下方法:

INCLUDE(ExternalProject)

EXTERNALPROJECT_ADD(
    libconfig
    URL ${CMAKE_CURRENT_SOURCE_DIR}/libconfig-1.4.8.tar.gz
    IF(APPLE)
        #Mac detected
        PREFIX libconfig/libconfig-1.4.8
    ENDIF(APPLE)
    IF(UNIX)
         PREFIX libconfig
    ENDIF(UNIX)

    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-examples
    # We patch in order to avoid building the tests.
    # Otherwise compilation will fail due to relative paths used in libconfig.
    PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/libconfig.patch
    BUILD_COMMAND make
    INSTALL_COMMAND make install
)

1
这似乎是一个既有问题又有答案的情况。如果没有任何问题需要解决,您可以在此回答自己的问题并接受它... 如果您仍然有问题,请重新表述一下,因为似乎这里没有任何未解答的问题。 :-) - DLRdave
谢谢您的赞扬,我已经将我的答案添加到了我的问题中。 - tune2fs
1个回答

6
我找到了问题:
第一个问题是,测试IF(UNIX)也对Mac OS X操作系统返回真。
第二个问题是,一些情况下PREFIX不能改变。因此一个解决方法是使用变量。
现在这段代码可以正常工作了:
IF(UNIX)
    SET(LIBCONFIG_PREFIX libconfig) 
ENDIF(UNIX)
IF(APPLE)
    SET(LIBCONFIG_PREFIX libconfig/libconfig-1.4.8)    
ENDIF(APPLE)


INCLUDE(ExternalProject)

EXTERNALPROJECT_ADD(
    libconfig
    URL ${CMAKE_CURRENT_SOURCE_DIR}/libconfig-1.4.8.tar.gz

    PREFIX ${LIBCONFIG_PREFIX}

    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-examples
    # We patch in order to avoid building the tests.
    # Otherwise compilation will fail due to relative paths used in libconfig.
    PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/libconfig.patch
    BUILD_COMMAND make
    INSTALL_COMMAND make install
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接