[cmake-developers] [CMake 0013846]: Custom commands not working when comamnd output used in another directory
Mantis Bug Tracker
mantis at public.kitware.com
Fri Jan 11 20:23:37 EST 2013
The following issue has been SUBMITTED.
======================================================================
http://public.kitware.com/Bug/view.php?id=13846
======================================================================
Reported By: szx
Assigned To:
======================================================================
Project: CMake
Issue ID: 13846
Category: (No Category)
Reproducibility: have not tried
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2013-01-11 20:23 EST
Last Modified: 2013-01-11 20:23 EST
======================================================================
Summary: Custom commands not working when comamnd output
used in another directory
Description:
At least for the Unix Makefile generator (haven't tried others) custom commands
are not called when their output file is specified as a source file for a target
defined in the parent directory. As soon as I move both add_custom_command() and
the target to the same file, everything works fine.
Steps to Reproduce:
============ Case 1 =============
1. Create CMakeLists.txt with the following contents
cmake_minimum_required(VERSION 2.8.9)
project(test)
add_subdirectory("src")
set_source_files_properties("src/test.c" PROPERTIES GENERATED TRUE)
add_executable(test "src/test.c")
2. Create a directory called "src" and another CMakeLists.txt in it:
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/test.c"
COMMAND echo "int main\\(\\) \\{\\}" > "${CMAKE_CURRENT_SOURCE_DIR}/test.c"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
3. You will get the following error from make:
test1-build$ make
make[2]: *** No rule to make target `src/test.c', needed by
`CMakeFiles/test.dir/src/test.c.o'. Stop.
make[1]: *** [CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2
============ Case 2 =============
1. Create a CMakeLists.txt with the following contents:
cmake_minimum_required(VERSION 2.8.9)
project(test)
file(MAKE_DIRECTORY "src")
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/test.c"
COMMAND echo "int main\\(\\) \\{\\}" > "${CMAKE_CURRENT_SOURCE_DIR}/src/test.c"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
set_source_files_properties("src/test.c" PROPERTIES GENERATED TRUE)
add_executable(test "src/test.c")
2. make will complete without errors:
test2-build$ make
[ 50%] Generating /home/asd/Desktop/fuck-cmake/test2/src/test.c
Scanning dependencies of target test
[100%] Building C object CMakeFiles/test.dir/src/test.c.o
Linking C executable test
[100%] Built target test
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2013-01-11 20:23 szx New Issue
2013-01-11 20:23 szx File Added: test.zip
======================================================================
More information about the cmake-developers
mailing list