Hi all,
In our builds, we use custom targets to copy library headers to an
include directory from which clients of the library then #include
from. This works for VS2008 but is broken in VS2010 (using CMake 2.8.3
rc3).
Here is a small example:
-------------------------------
CMakeLists.txt:
-------------------------------
cmake_minimum_required(VERSION 2.8)
project(header-copy-test)
set (header_destination_dir ${CMAKE_BINARY_DIR}/include)
include_directories (${header_destination_dir})
set (headers_to_copy
${CMAKE_SOURCE_DIR}/headers/header.h
)
# Create a target responsible for:
# - creating the include directory
# - copying the header into that directory
add_custom_target (
${PROJECT_NAME}_headers ALL
DEPENDS ${header_destination_dir} ${headers_to_copy}
SOURCES ${headers_to_copy}
)
add_custom_command(
OUTPUT ${header_destination_dir}
COMMAND ${CMAKE_COMMAND} -E make_directory ${header_destination_dir}
VERBATIM
)
foreach (h ${headers_to_copy})
add_custom_command (
TARGET ${PROJECT_NAME}_headers
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${h}"
"${header_destination_dir}/"
VERBATIM
)
endforeach ()
# Now add an executable, and make it depend on the custom target above.
add_executable(
${PROJECT_NAME}
main.cpp
)
add_dependencies (${PROJECT_NAME} ${PROJECT_NAME}_headers)
-------------------------------
main.cpp
-------------------------------
#include "header.h"
int main() {}
-------------------------------
headers/header.h
-------------------------------
#error
Here are the steps to reproduce:
1. Use the VS2010 generator to generate the project, and open it in VS2010.
2. Right-click on the header-copy-test project in Solution Explorer,
and build. You should get a failure due to the #error in header.h.
3. Edit the original header.h (NOT the copied header) to remove the
#error, then repeat step 2. The corrected header should have been
copied, but it wasn't, leading to the same build error.
As I mentioned, this works as expected in VS2008. Am I doing something
wrong, or is this a bug in CMake or a limitation in VS2010 support?
Another issue is that I specified the headers as SOURCES in the custom
target, but they don't show up in the IDE.
Thanks,
Ben
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake