我有一個cmake項目,其中包含許多不同的目標。首先它構建一個用於處理一些數據文件的可執行文件(讓我們調用這個DataProcessor)。然後它用可執行文件處理這些數據文件。然後,構建第二個可執行文件(我們稱之爲MyApp),並與處理後的數據文件一起運行。策略CMP0026未設置:禁止使用LOCATION目標屬性
還有一個目標,它將所有已處理的數據文件和MyApp都捆綁到一個tar文件中,以便我們分發它們。
在我的CMakeLists.txt文件中,有我有以下行:
get_target_property(DATA_PROCESSOR_EXE DataProcessor LOCATION)
get_target_property(MY_APP_EXE MyApp LOCATION)
我需要這些在我CMakeLists文件運行各種其他命令。例如,DATA_PROCESSOR_EXE在自定義命令用於處理數據文件,就像這樣:
add_custom_command(
OUTPUT ${DATA_OUT}
COMMAND ${DATA_PROCESSOR_EXE} -o ${DATA_OUT} ${DATA_IN}
DEPENDS DataProcessor)
當我捆了一切我使用MyApp的位置,以及:
# Convert executable paths to relative paths.
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" MY_APP_EXE_RELATIVE
"${MY_APP_EXE}")
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" DATA_PROCESSOR_EXE_RELATIVE
"${DATA_PROCESSOR_EXE}")
# The set of files and folders to export
set(EXPORT_FILES
assets
src/rawdata
${MY_APP_EXE_RELATIVE}
${DATA_PROCESSOR_EXE_RELATIVE})
# Create a zipped tar of all the necessary files to run the game.
add_custom_target(export
COMMAND cd ${CMAKE_SOURCE_DIR} && tar -czvf myapp.tar.gz ${EXPORT_FILES}
DEPENDS splat
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..)
的問題是,試圖現在得到目標的位置特性將導致警告說法:
CMake Warning (dev) at CMakeLists.txt:86 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "DataProcessor".
Use the target name directly with add_custom_command, or use the generator
expression $<TARGET_FILE>, as appropriate.
我不明白它是如何想我使用add_custome_command
或意味着什麼由use the generator expression $<TARGET_FILE>
這似乎解決了我剛剛處理數據的第一種情況,但我無法弄清楚如何獲得調用tar的相對路徑,如果甚至可能的話。似乎我需要做一些字符串替換,據我所知,這是不支持的。 – Alex 2014-09-19 23:05:03