2010-06-17 32 views
2

我喜歡讓我的Makefiles保持靈活多變的功能。其中一個我通常添加到make命令的任務是tar,例如下面的指令做這項工作:CMake如何用於通過個性化命令生成Makefiles?

tar: 
    tar -cvf $(PROGNAME).tar $(SRCS) Makefile 

我的問題是:如何CMake的可用於產生像tar個性化的命令?
我希望看到一些代碼示例。
有關完整的功能,創建項目組件並能夠將它們用作參數將非常有用。
Exempli gratia:僅歸檔頭文件或某些特定的庫)。

在此先感謝您的答案!

回答

2

您的焦油例如直譯是:

ADD_CUSTOM_TARGET(tar 
    tar -cvf ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.tar ${SRCS} Makefile 
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) 

這增加了一個新的目標「焦油」始終執行時只要您運行make tar它被要求作爲一個命令行的目標,即給定的命令它會創建一個新的tar文件。 WORKING_DIRECTORY參數將確保源文件從源目錄中獲取,而CMAKE_CURRENT_BINARY_DIR確保輸出進入當前構建目錄。

稍微好一點的迭代是將tar替換爲${CMAKE_COMMAND} -E tar,因爲這不取決於命令行tar程序可用。所以,當你運行make tar像這樣的焦油了所有的頭文件:

SET(HEADER_FILES my.h another.h) 
SET(PROGNAME myprog) 
ADD_CUSTOM_TARGET(tar ${CMAKE_COMMAND} -E tar -czvf 
    ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.tar.gz ${HEADER_FILES} 
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) 

一個更好的迭代將使用CPack功能來創建源代碼或二進制tar文件,但是這是相當多的工作,可能不是你所需要的。

+0

無法解釋更好!謝謝! – Rizo 2010-06-18 10:50:26

+0

順便說一句,爲什麼我要在使用** CMake **時備份'Makefile'? =) – Rizo 2010-06-18 16:31:00

+1

爲什麼的確如此!也許一個包裝的Makefile,只有「mkdir構建; CD建立; cmake ..; $(MAKE)$(MAKECMDGOALS)」? – richq 2010-06-18 16:39:13