2016-12-11 40 views
0

在Win7上使用cmake版本3.7.0-rc3,我可以使用ExternalProject_Add_Step运行下面的代码没有问题。但使用cmake版本3.7.0上Ubuntu16,我得到的错误:ExternalProject_Add_Step ERROR add_custom_command给出APPEND选项并输出

add_custom_command given APPEND option with output "ExternalProjects/Stamp/boost/boost-CONFIGURE" which is not already a custom command output. 

这里的简化代码再现问题。

ExternalProject_Add(
    boost 
    URL https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.gz/download 
    URL_HASH MD5=6f4571e7c5a66ccc3323da6c24be8f05 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
) 

ExternalProject_Add_Step(
    boost UNIX_CONFIGURE DEPENDEES DOWNLOAD DEPENDERS CONFIGURE 
    WORKING_DIRECTORY "<SOURCE_DIR>" COMMAND ./bootstrap.sh 
) 

罪魁祸首似乎是DEPENDERS CONFIGURE。如果我把它拿出来,那么它工作正常。但是...我希望能够指定CONFIGURE这个步骤取决于这个自定义步骤,在Windows上我可以,但是在Ubuntu上我不能。任何想法为什么?

回答

2

我在documentation中看不到它,但是您只是遇到了区分大小写问题。修改您的CMakeLists.txt到:

❯ cat ../CMakeLists.txt 
cmake_minimum_required(VERSION 3.7) 
include(ExternalProject) 
ExternalProject_Add(
    boost 
    URL https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.tar.gz/download 
    URL_HASH MD5=6f4571e7c5a66ccc3323da6c24be8f05 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
    ) 

ExternalProject_Add_Step(
    boost UNIX_CONFIGURE DEPENDEES download DEPENDERS configure 
    WORKING_DIRECTORY "boost-prefix/src/boost/" COMMAND ./bootstrap.sh 
    ) 

注意, “下载” 和 “配置”,在ExternalProject_Add_Step()现在downcased。现在,cmake并成功完成。现在

❯ cmake .. 
-- The C compiler identification is AppleClang 8.0.0.8000042 
-- The CXX compiler identification is AppleClang 8.0.0.8000042 
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc 
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Detecting C compile features 
-- Detecting C compile features - done 
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ 
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /Users/nega/foo/build 

❯ make 
Scanning dependencies of target boost 
[ 11%] Creating directories for 'boost' 
[ 22%] Performing download step (download, verify and extract) for 'boost' 
-- verifying file... 
     file='/Users/nega/foo/build/boost-prefix/src/boost_1_62_0.tar.gz' 
-- File already exists and hash match (skip download): 
    file='/Users/nega/foo/build/boost-prefix/src/boost_1_62_0.tar.gz' 
    MD5='6f4571e7c5a66ccc3323da6c24be8f05' 
-- extracting... 
    src='/Users/nega/foo/build/boost-prefix/src/boost_1_62_0.tar.gz' 
    dst='/Users/nega/foo/build/boost-prefix/src/boost' 
-- extracting... [tar xfz] 
-- extracting... [analysis] 
-- extracting... [rename] 
-- extracting... [clean up] 
-- extracting... done 
[ 33%] Performing UNIX_CONFIGURE step for 'boost' 
Building Boost.Build engine with toolset darwin... tools/build/src/engine/bin.macosxx86_64/b2 
Detecting Python version... 2.7 
Detecting Python root... /Users/nega/i3/virtenv 
Unicode/ICU support for Boost.Regex?... not found. 
Generating Boost.Build configuration in project-config.jam... 

Bootstrapping is done. To build, run: 

    ./b2 

To adjust configuration, edit 'project-config.jam'. 
Further information: 

    - Command line help: 
    ./b2 --help 

    - Getting started guide: 
    http://www.boost.org/more/getting_started/unix-variants.html 

    - Boost.Build documentation: 
    http://www.boost.org/build/doc/html/index.html 

[ 44%] No update step for 'boost' 
[ 55%] No patch step for 'boost' 
[ 66%] No configure step for 'boost' 
[ 77%] No build step for 'boost' 
[ 88%] No install step for 'boost' 
[100%] Completed 'boost' 
[100%] Built target boost 

,看看你的build目录的boost-prefix/src/boost-stamp

❯ v boost-prefix/src/boost-stamp      
total 32 
drwxr-xr-x 15 nega staff 510 Dec 20 12:29 ./ 
drwxr-xr-x 6 nega staff 204 Dec 20 12:28 ../ 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-UNIX_CONFIGURE 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-build 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-configure 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-done 
-rw-r--r-- 1 nega staff  0 Dec 20 12:28 boost-download 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-install 
-rw-r--r-- 1 nega staff  0 Dec 20 12:28 boost-mkdir 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-patch 
-rw-r--r-- 1 nega staff  0 Dec 20 12:29 boost-update 
-rw-r--r-- 1 nega staff 173 Dec 20 12:18 boost-urlinfo.txt 
-rw-r--r-- 1 nega staff 4424 Dec 20 12:18 download-boost.cmake 
-rw-r--r-- 1 nega staff 1611 Dec 20 12:28 extract-boost.cmake 
-rw-r--r-- 1 nega staff  0 Dec 20 12:28 verify-boost.cmake 

你会发现在每一个步骤都有一个“文件邮票”后命名。默认步骤全部为小写,而您的自定义步骤“UNIX_CONFIGURE”为大写,就像您定义的一样。如果您混合使用您的自定义步骤,则会将其作为输出。

❯ grep -i unix ../CMakeLists.txt 
    boost uNiX_CoNFiGuRe DEPENDEES download DEPENDERS configure 
❯ make | grep -i unix 
[ 33%] Performing uNiX_CoNFiGuRe step for 'boost' 
❯ find boost-prefix/src/boost-stamp | grep -i unix 
boost-prefix/src/boost-stamp/boost-uNiX_CoNFiGuRe 

另外,看看make输出。

[ 22%] Performing download step (download, verify and extract) for 'boost' 
[....] 
[ 33%] Performing uNiX_CoNFiGuRe step for 'boost' 
[....] 
[ 44%] No update step for 'boost' 
[ 55%] No patch step for 'boost' 
[ 66%] No configure step for 'boost' 
[ 77%] No build step for 'boost' 
[ 88%] No install step for 'boost' 
[100%] Completed 'boost' 
[100%] Built target boost 

所有默认步骤均以小写字母引用。

摘要

在CMake的的ExternalProject模块,是指在默认小写的步骤。

+1

解决实际的错误消息时,ExternalProject _ *()函数是其他CMake命令的包装器。 'add_custom_command()'试图增加一个依赖到另一个自定义命令“boost-CONFIGURE”,但它不存在,因为实际名称是“boost-configure”。 – nega